? files
? hook_link_as_array_1.diff
? hook_link_as_array_2.diff
? update.log
? database/database.prefixed.mysql
Index: includes/theme.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.inc,v
retrieving revision 1.263
diff -u -F^f -u -r1.263 theme.inc
--- includes/theme.inc	22 Oct 2005 15:14:46 -0000	1.263
+++ includes/theme.inc	23 Oct 2005 11:06:29 -0000
@@ -237,7 +237,6 @@ function theme_get_settings($key = NULL)
     }
   }
   $settings = array_merge($defaults, variable_get('theme_settings', array()));
-
   if ($key) {
     $settings = array_merge($settings, variable_get(str_replace('/', '_', 'theme_'. $key .'_settings'), array()));
   }
@@ -325,20 +324,16 @@ function theme_get_setting($setting_name
           unset($attributes);
           if (!empty($value['text'][$i])) {
             if (!empty($value['description'][$i])) {
-              $attributes['title'] = $value['description'][$i];
-            }
-            $text = $value['text'][$i];
-            $link = $value['link'][$i];
-            if (substr($link, 0, 7) == 'http://') {
-              $settings[$type .'_links'][] = '<a href="'. check_url($link) .'"'. drupal_attributes($attributes) .'>'. check_plain($text) .'</a>';
-            }
-            else {
-              $settings[$type .'_links'][] = l($text, $link, $attributes);
+              $settings[$type .'_links'][$type .'_links_'. $i] = $value['description'][$i];
             }
+            $settings[$type .'_links'][$type .'_links_'. $i]->title = $value['text'][$i];
+            $settings[$type .'_links'][$type .'_links_'. $i]->link = $value['link'][$i];
+            $settings[$type .'_links'][$type .'_links_'. $i]->attributes = $attributes;
           }
         }
-        if ($settings[$type .'_links'] == array()) {
-          $settings[$type .'_links'] = array(l(t('edit %type links', array('%type' => $type)),'admin/themes/settings'));
+        if ($settings[$type .'_links'][$type .'_links_'. $i]->title != '') {
+          $settings[$type .'_links'][$type .'_links_default']->title = t('edit %type links', array('%type' => $type));
+          $settings[$type .'_links'][$type .'_links_default']->link = 'admin/themes/settings';
         }
       }
     }
@@ -502,14 +497,26 @@ function theme_status_messages() {
  * Return a themed set of links.
  *
  * @param $links
- *   An array of links to be themed.
+ *   An keyed array of link objects.
  * @param $delimiter
  *   A string used to separate the links.
  * @return
  *   A string containing the themed links.
  */
 function theme_links($links, $delimiter = ' | ') {
-  return implode($delimiter, $links);
+  foreach ($links as $link) {
+    if ($link->link && substr($link->link, 0, 7) == 'http://') {
+      $output[] = '<a href="'. check_url($link->link) .'"'. drupal_attributes($link->attributes) .'>'. check_plain($link->text) .'</a>';
+    }
+    elseif ($link->link) {
+      $output[] = l($link->title, $link->link, $link->attributes, $link->query, $link->fraction);
+    }
+    elseif ($link->title) {
+      //Some links are actually not links ...
+      $output[] = $link->title;
+    }
+  }
+  return $output ? implode($delimiter, $output) : NULL;
 }
 
 /**
Index: modules/blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog.module,v
retrieving revision 1.233
diff -u -F^f -u -r1.233 blog.module
--- modules/blog.module	11 Oct 2005 19:44:34 -0000	1.233
+++ modules/blog.module	23 Oct 2005 11:06:29 -0000
@@ -247,7 +247,9 @@ function blog_link($type, $node = 0, $ma
 
   if ($type == 'node' && $node->type == 'blog') {
     if (arg(0) != 'blog' || arg(1) != $node->uid) {
-      $links[] = l(t("%username's blog", array('%username' => $node->name)), "blog/$node->uid", array('title' => t("Read %username's latest blog entries.", array('%username' => $node->name))));
+      $links['blog_usersblog']->title = t("%username's blog", array('%username' => $node->name));
+      $links['blog_usersblog']->link = "blog/$node->uid";
+      $links['blog_usersblog']->attributes = array('title' => t("Read %username's latest blog entries.", array('%username' => $node->name)));
     }
   }
 
Index: modules/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book.module,v
retrieving revision 1.323
diff -u -F^f -u -r1.323 book.module
--- modules/book.module	11 Oct 2005 19:44:34 -0000	1.323
+++ modules/book.module	23 Oct 2005 11:06:30 -0000
@@ -17,7 +17,7 @@ function book_node_info() {
  * Implementation of hook_perm().
  */
 function book_perm() {
-  return array('create book pages', 'maintain books', 'edit own book pages', 'export books', 'see printer-friendly version');
+  return array('create book pages', 'maintain books', 'edit own book pages');
 }
 
 /**
@@ -52,21 +52,23 @@ function book_access($op, $node) {
  * Implementation of hook_link().
  */
 function book_link($type, $node = 0, $main = 0) {
-
   $links = array();
 
   if ($type == 'node' && isset($node->parent)) {
     if (!$main) {
       if (book_access('create', $node)) {
-        $links[] = l(t('add child page'), "node/add/book/parent/$node->nid");
-      }
-      if (user_access('see printer-friendly version')) {
-        $links[] = l(t('printer-friendly version'), 'book/export/html/'. $node->nid, array('title' => t('Show a printer-friendly version of this book page and its sub-pages.')));
-      }
-      if (user_access('export books')) {
-        $links[] = l(t('export DocBook XML'), 'book/export/docbook/'. $node->nid, array('title' => t('Export this book page and its sub-pages as DocBook XML.')));
-        $links[] = l(t('export OPML'), 'book/export/opml/'. $node->nid, array('title' => t('Export this book page and its sub-pages as OPML.')));
+        $links['book_add_child']->title = t('add child page');
+        $links['book_add_child']->link = "node/add/book/parent/$node->nid";
       }
+      $links['book_export_html']->title = t('export plain HTML');
+      $links['book_export_html']->link = "book/export/html/$node->nid";
+      $links['book_export_html']->attributes = array('title' => t('Export this book page and its sub-pages as a plain HTML page.'));
+      $links['book_export_docbook']->title = t('export DocBook XML');
+      $links['book_export_docbook']->link = "book/export/docbook/$node->nid";
+      $links['book_export_docbook']->attributes = array('title' => t('Export this book page and its sub-pages as DocBook XML.'));
+      $links['book_export_opml']->title = t('export OPML');
+      $links['book_export_opml']->link = "book/export/opml/$node->nid";
+      $links['book_export_opml']->attributes = array('title' => t('Export this book page and its sub-pages as OPML.'));
     }
   }
 
@@ -114,7 +116,7 @@ function book_menu($may_cache) {
     $items[] = array(
       'path' => 'book/export',
       'callback' => 'book_export',
-      'access' => (user_access('export books') || user_access('see printer-friendly version')) && user_access('access content'),
+      'access' => user_access('access content'),
       'type' => MENU_CALLBACK);
   }
   else {
Index: modules/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment.module,v
retrieving revision 1.384
diff -u -F^f -u -r1.384 comment.module
--- modules/comment.module	20 Oct 2005 09:27:36 -0000	1.384
+++ modules/comment.module	23 Oct 2005 11:06:32 -0000
@@ -157,19 +157,27 @@ function comment_link($type, $node = 0, 
         $new = comment_num_new($node->nid);
 
         if ($all) {
-          $links[] = l(format_plural($all, '1 comment', '%count comments'), "node/$node->nid", array('title' => t('Jump to the first comment of this posting.')), NULL, 'comment');
+          $links['comment_comments']->title = format_plural($all, '1 comment', '%count comments');
+          $links['comment_comments']->link = "node/$node->nid";
+          $links['comment_comments']->attributes = array('title' => t('Jump to the first comment of this posting.'));
+          $links['comment_comments']->fraction = 'comment';
 
           if ($new) {
-            $links[] = l(format_plural($new, '1 new comment', '%count new comments'), "node/$node->nid", array('title' => t('Jump to the first new comment of this posting.')), NULL, 'new');
+          $links['comment_comments_new']->title = format_plural($new, '1 new comment', '%count new comments');
+         $links['comment_comments_new']->link = "node/$node->nid";
+         $links['comment_comments_new']->attributes = array('title' => t('Jump to the first new comment of this posting.'));
+         $links['comment_comments_new']->fraction = 'new';
           }
         }
         else {
           if ($node->comment == 2) {
             if (user_access('post comments')) {
-              $links[] = l(t('add new comment'), "comment/reply/$node->nid", array('title' => t('Add a new comment to this page.')));
+               $links['comment_add']->title = t('add new comment');
+               $links['comment_add']->link = "comment/reply/$node->nid";
+               $links['comment_add']->attributes = array('title' => t('Add a new comment to this page.'));
             }
             else {
-              $links[] = theme('comment_post_forbidden');
+              $links['comment_forbidden']->title = theme('comment_post_forbidden');
             }
           }
         }
@@ -181,10 +189,13 @@ function comment_link($type, $node = 0, 
 
       if ($node->comment == 2 && variable_get('comment_form_location', 0) == 0) {
         if (user_access('post comments')) {
-          $links[] = l(t('add new comment'), "comment/reply/$node->nid", array('title' => t('Share your thoughts and opinions related to this posting.')), NULL, 'comment');
+          $links['comment_add']->title = t('add new comment');
+          $links['comment_add']->link = "comment/reply/$node->nid";
+          $links['comment_add']->attributes = array('title' => t('Share your thoughts and opinions related to this posting.'));
+          $links['comment_add']->fraction = 'comment';
         }
         else {
-          $links[] = theme('comment_post_forbidden');
+          $links['comment_forbidden']->title = theme('comment_post_forbidden');
         }
       }
     }
@@ -702,23 +713,30 @@ function comment_links($comment, $return
 
   // If we are viewing just this comment, we link back to the node.
   if ($return) {
-    $links[] = l(t('parent'), comment_node_url(), NULL, NULL, "comment-$comment->cid");
+    $links['comment_parent']->title = t('parent');
+    $links['comment_parent']->link = comment_node_url();
+    $links['comment_parent']->fraction = "comment-$comment->cid";
   }
 
   if (node_comment_mode($comment->nid) == 2) {
     if (user_access('administer comments') && user_access('access administration pages')) {
-      $links[] = l(t('delete'), "comment/delete/$comment->cid");
-      $links[] = l(t('edit'), "comment/edit/$comment->cid");
-      $links[] = l(t('reply'), "comment/reply/$comment->nid/$comment->cid");
+      $links['comment_delete']->title = t('delete');
+      $links['comment_delete']->link = "comment/delete/$comment->cid";
+      $links['comment_edit']->title = t('edit');
+      $links['comment_delete']->link = "comment/edit/$comment->cid";
+      $links['comment_reply']->title = t('reply');
+      $links['comment_delete']->link = "comment/reply/$comment->nid/$comment->cid";
     }
     else if (user_access('post comments')) {
       if (comment_access('edit', $comment)) {
-        $links[] = l(t('edit'), "comment/edit/$comment->cid");
+        $links['comment_edit']->title = t('edit');
+        $links['comment_edit']->link = "comment/edit/$comment->cid";
       }
-      $links[] = l(t('reply'), "comment/reply/$comment->nid/$comment->cid");
+      $links['comment_reply']->title = t('reply');
+      $links['comment_reply']->link = "comment/reply/$comment->nid/$comment->cid";
     }
     else {
-      $links[] = theme('comment_post_forbidden');
+      $links['comment_forbidden']->title = theme('comment_post_forbidden');
     }
   }
 
Index: modules/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum.module,v
retrieving revision 1.277
diff -u -F^f -u -r1.277 forum.module
--- modules/forum.module	21 Oct 2005 11:12:46 -0000	1.277
+++ modules/forum.module	23 Oct 2005 11:06:33 -0000
@@ -423,11 +423,15 @@ function forum_link($type, $node = 0, $m
     }
 
     if ($prev) {
-      $links[] = l(t('previous forum topic'), "node/$prev->nid", array('title' => check_plain($prev->title)));
+      $links['forum_previous']->title = t('previous forum topic');
+      $links['forum_previous']->link = "node/$prev->nid";
+      $links['forum_previous']->attributes = array('title' => check_plain($prev->title));
     }
 
     if ($next) {
-      $links[] = l(t('next forum topic'), "node/$next->nid", array('title' => check_plain($next->title)));
+      $links['forum_next']->title = t('next forum topic');
+      $links['forum_next']->link = "node/$next->nid";
+      $links['forum_next']->attributes = array('title' => check_plain($next->title));
     }
   }
 
Index: modules/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.538
diff -u -F^f -u -r1.538 node.module
--- modules/node.module	22 Oct 2005 15:14:46 -0000	1.538
+++ modules/node.module	23 Oct 2005 11:06:35 -0000
@@ -847,7 +847,9 @@ function node_link($type, $node = 0, $ma
     }
 
     if ($main == 1 && $node->teaser && $node->readmore) {
-      $links[] = l(t('read more'), "node/$node->nid", array('title' => t('Read the rest of this posting.'), 'class' => 'read-more'));
+      $links['node_readmore']->title = t('read more');
+      $links['node_readmore']->link = "node/$node->nid"; 
+      $links['node_readmore']->attributes = array('title' => t('Read the rest of this posting.'), 'class' => 'read-more');
     }
   }
 
Index: modules/statistics.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/statistics.module,v
retrieving revision 1.210
diff -u -F^f -u -r1.210 statistics.module
--- modules/statistics.module	12 Oct 2005 01:00:24 -0000	1.210
+++ modules/statistics.module	23 Oct 2005 11:06:36 -0000
@@ -96,7 +96,7 @@ function statistics_link($type, $node = 
   if ($type != 'comment' && variable_get('statistics_display_counter', 0)) {
     $statistics = statistics_get($node->nid);
     if ($statistics) {
-      $links[] = format_plural($statistics['totalcount'], '1 read', '%count reads');
+      $links['statistics_count']->title = format_plural($statistics['totalcount'], '1 read', '%count reads');
     }
   }
   return $links;
Index: modules/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy.module,v
retrieving revision 1.232
diff -u -F^f -u -r1.232 taxonomy.module
--- modules/taxonomy.module	21 Oct 2005 11:12:46 -0000	1.232
+++ modules/taxonomy.module	23 Oct 2005 11:06:37 -0000
@@ -30,12 +30,14 @@ function taxonomy_link($type, $node = NU
     if (array_key_exists('taxonomy', $node)) {
       foreach ($node->taxonomy as $tid) {
         $term = taxonomy_get_term($tid);
-        $links[] = l($term->name, taxonomy_term_path($term));
+        $links['taxonomy_term_'. $tid]->title = $term->name;
+        $links['taxonomy_term_'. $tid]->link = "taxonomy/term/$term->tid";
       }
     }
     else {
       foreach (taxonomy_node_get_terms($node->nid) as $term) {
-        $links[] = l($term->name, taxonomy_term_path($term));
+        $links['taxonomy_term_'. $tid]->title = $term->name;
+        $links['taxonomy_term_'. $tid]->link = "taxonomy/term/$term->tid";
       }
     }
     return $links;
Index: modules/upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload.module,v
retrieving revision 1.55
diff -u -F^f -u -r1.55 upload.module
--- modules/upload.module	11 Oct 2005 19:44:35 -0000	1.55
+++ modules/upload.module	23 Oct 2005 11:06:38 -0000
@@ -40,7 +40,10 @@ function upload_link($type, $node = 0, $
       }
     }
     if ($num_files) {
-      $links[] = l(format_plural($num_files, '1 attachment', '%count attachments'), "node/$node->nid", array('title' => t('Read full article to view attachments.')), NULL, 'attachments');
+      $links['upload_attachments']->title = format_plural($num_files, '1 attachment', '%count attachments');
+      $links['upload_attachments']->link = "node/$node->nid";
+      $links['upload_attachments']->attributes = array('title' => t('Read full article to view attachments.'));
+      $links['upload_attachments']->fraction = 'attachments';
     }
   }
