Index: profiles/default/default.install
===================================================================
RCS file: /cvs/drupal/drupal/profiles/default/default.install,v
retrieving revision 1.18
diff -u -r1.18 default.install
--- profiles/default/default.install	10 Nov 2009 17:27:54 -0000	1.18
+++ profiles/default/default.install	26 Nov 2009 16:34:49 -0000
@@ -121,6 +121,16 @@
       'cache' => -1,
     ),
     array(
+      'module' => 'node',
+      'delta' => 'recent',
+      'theme' => 'seven',
+      'status' => 1,
+      'weight' => 10,
+      'region' => 'dashboard_main',
+      'pages' => '',
+      'cache' => -1,
+    ),
+    array(
       'module' => 'user',
       'delta' => 'new',
       'theme' => 'seven',
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1169
diff -u -r1.1169 node.module
--- modules/node/node.module	19 Nov 2009 04:00:47 -0000	1.1169
+++ modules/node/node.module	26 Nov 2009 16:34:49 -0000
@@ -1994,6 +1994,9 @@
   $blocks['syndicate']['info'] = t('Syndicate');
   // Not worth caching.
   $blocks['syndicate']['cache'] = DRUPAL_NO_CACHE;
+  
+  $blocks['recent']['info'] = t('Recent content');
+  
   return $blocks;
 }
 
@@ -2001,13 +2004,83 @@
  * Implement hook_block_view().
  */
 function node_block_view($delta = '') {
-  $block['subject'] = t('Syndicate');
-  $block['content'] = theme('feed_icon', array('url' => url('rss.xml'), 'title' => t('Syndicate')));
+  $block = array();
 
+  switch ($delta) {
+    case 'syndicate':
+      $block['subject'] = t('Syndicate');
+      $block['content'] = theme('feed_icon', array('url' => url('rss.xml'), 'title' => t('Syndicate')));
+      break;
+
+    case 'recent':
+      if (user_access('access content')) {
+        $block['subject'] = t('Recent content');
+        $items = array();
+        
+        // Can't use node_load_multiple() due to inability to limit
+        // and order results - would return all nodes if we used it
+        $select = db_select('node', 'n')
+          ->fields('n', array('uid', 'nid', 'type', 'status', 'title', 'changed'))
+          ->condition('status', 1)
+          ->orderBy('created', 'DESC')
+          ->range(0, variable_get('node_recent_block_count', 10))
+          ->addTag('node_access')
+          ->execute();
+
+        while ($node = $select->fetch(PDO::FETCH_OBJ)) {
+          $item = array(l($node->title, 'node/' . $node->nid)
+              . theme('mark', array('type' => node_mark($node->nid, $node->changed)))
+              . '<br />' . theme('username', array('account' => user_load($node->uid))));
+          $item[] = node_access('update', $node) ? l(t('edit'), 'node/' . $node->nid . '/edit') : '';
+          $item[] = node_access('delete', $node) ? l(t('delete'), 'node/' . $node->nid . '/delete') : '';
+          $items[] = $item;
+        }
+
+        // TODO: Move to a theme function
+        if (count($items)) {
+          // TODO: Output is currently UGLY! Need to have "table" attached to heading
+          // to match http://img.skitch.com/20091028-mu8je3f7i9f5giyhbyyiaeg35s.png
+          // TODO: Valign top edit and delete columns 
+          $block['content'] = theme('table', array('rows' => $items));
+          // TODO: Align right
+          $block['content'] .= l(t('Show all content'), 'admin/content');
+        } else {
+          $block['content'] = t('No content available.');
+        }
+      }
+      break;
+
+  }
   return $block;
 }
 
 /**
+ * Implementation of hook_block_configure().
+ */
+function node_block_configure($delta = '') {
+  $form = array();
+    if ($delta == 'recent') {
+      $form['node_recent_block_count'] = array(
+        '#type' => 'select',
+        '#title' => t('Amount of recent content'),
+        '#default_value' => variable_get('node_recent_block_count', 10),
+        '#options' => drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30)),
+        '#description' => t('Pieces of content displayed in the <em>Recently posted</em> block.'),
+      );
+    }
+  return $form;
+}
+
+/**
+ * Implementation of hook_block_save().
+ */
+function node_block_save($delta = '', $edit = array()) {
+  if ($delta == 'recent') {
+    variable_set('node_recent_block_count', $edit['node_recent_block_count']);
+  }
+}
+
+/**
  * A generic function for generating RSS feeds from a set of nodes.
  *
  * @param $nids
