Index: simplenews_template.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplenews_template/simplenews_template.module,v
retrieving revision 1.2
diff -u -p -r1.2 simplenews_template.module
--- simplenews_template.module	9 Apr 2007 21:52:23 -0000	1.2
+++ simplenews_template.module	18 Oct 2008 03:01:11 -0000
@@ -22,6 +22,65 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+/**
+ * Implementation of hook_perm().
+ */
+function simplenews_template_perm() {
+  return array('access newsletter preview');
+}
+
+/**
+ * Implementation of hook_menu().
+ */
+function simplenews_template_menu($may_cache) {
+  $items = array();
+  if ($may_cache) {
+    $items[] = array(
+      'path' => 'simplenews_template/preview',
+      'title' => t('Simplenews Template preview'),
+      'callback' => 'simplenews_template_preview',
+      'access' => user_access('access newsletter preview'),
+      'type' => MENU_CALLBACK,
+    );
+  }
+  return $items;
+}
+
+/**
+ * Implementation of hook_link_alter().
+ */
+function simplenews_template_link_alter(&$node, &$links) {
+  if ($node->type == 'simplenews' && $node->s_format == 'html' && user_access('access newsletter preview')) {
+    $links['simplenews_preview'] = array(
+      'title' => t('Preview'),
+      'href' => "simplenews_template/preview/$node->nid",
+      'attributes' => array(
+        'target' => '_blank',
+      ),
+    );
+  }
+}
+
+/**
+ * Output a Simplenews template'd newsletter node like in a mail.
+ *
+ * @param $nid
+ *   The simplenews node id to render.
+ * @param $vid
+ *   (optional) A revision id to use; most recent is used if omitted.
+ *
+ * @return
+ *   A full HTML page containing the same markup as in outgoing mails.
+ */
+function simplenews_template_preview($nid = 0, $vid = NULL) {
+  $node = node_load($nid, $vid);
+  if (!$node || $node->type != 'simplenews') {
+    return drupal_not_found();
+  }
+  $node = simplenews_node_prepare($nid, $vid, $node->tid);
+  $node = theme('simplenews_newsletter_footer', $node, '');
+  echo $node->body;
+}
 
 /******************************************************************************
  * THEMEABLE FUNCTIONS
