integrated printer_friendly into the core
authorteepe <teepe@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 16 Nov 2001 14:49:26 +0000 (14:49 +0000)
committerteepe <teepe@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 16 Nov 2001 14:49:26 +0000 (14:49 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1765 7612ce4b-ef26-0410-bec9-ea0150e637f0

src/load_prefs.php
src/options.php
src/options_display.php
src/printer_friendly_bottom.php [new file with mode: 0644]
src/printer_friendly_main.php [new file with mode: 0644]
src/printer_friendly_top.php [new file with mode: 0644]
src/read_body.php

index 90745ab..24e18d4 100644 (file)
     $location_of_bar = getPref($data_dir, $username, 'location_of_bar', SMPREF_LOC_LEFT);
     $location_of_buttons = getPref($data_dir, $username, 'location_of_buttons', SMPREF_LOC_BETWEEN);
 
     $location_of_bar = getPref($data_dir, $username, 'location_of_bar', SMPREF_LOC_LEFT);
     $location_of_buttons = getPref($data_dir, $username, 'location_of_buttons', SMPREF_LOC_BETWEEN);
 
-    global $collapse_folders, $show_html_default, $show_xmailer_default, $attachment_common_show_images;
+    global $collapse_folders, $show_html_default, $show_xmailer_default,
+           $attachment_common_show_images, $pf_subtle_link, $pf_cleandisplay;
     $collapse_folders = getPref($data_dir, $username, 'collapse_folders', SMPREF_ON);
 
     /* show_html_default is a int value. */
     $show_html_default = intval(getPref($data_dir, $username, 'show_html_default', SMPREF_ON));
     $collapse_folders = getPref($data_dir, $username, 'collapse_folders', SMPREF_ON);
 
     /* show_html_default is a int value. */
     $show_html_default = intval(getPref($data_dir, $username, 'show_html_default', SMPREF_ON));
-    $show_xmailer_default = intval(getPref($data_dir, $username, 'show_xmailer_default', SMPREF_OFF ) );
-    $attachment_common_show_images = intval(getPref($data_dir, $username, 'attachment_common_show_images', SMPREF_OFF ) );
+
+    $show_xmailer_default = getPref($data_dir, $username, 'show_xmailer_default', SMPREF_OFF );
+    $attachment_common_show_images = getPref($data_dir, $username, 'attachment_common_show_images', SMPREF_OFF );
+    $pf_subtle_link = getPref($data_dir, $username, 'pf_subtle_link', SMPREF_OFF);
+    $pf_cleandisplay = getPref($data_dir, $username, 'pf_cleandisplay', SMPREF_OFF);
 
     global $include_self_reply_all;
     $include_self_reply_all = getPref($data_dir, $username, 'include_self_reply_all', SMPREF_ON);
 
     global $include_self_reply_all;
     $include_self_reply_all = getPref($data_dir, $username, 'include_self_reply_all', SMPREF_ON);
index a7b9a08..447e8aa 100644 (file)
@@ -81,6 +81,8 @@
         setPref($data_dir, $username, 'page_selector_max', $new_page_selector_max);
         setPref($data_dir, $username, 'show_xmailer_default', $new_show_xmailer_default);
         setPref($data_dir, $username, 'attachment_common_show_images', $new_attachment_common_show_images);
         setPref($data_dir, $username, 'page_selector_max', $new_page_selector_max);
         setPref($data_dir, $username, 'show_xmailer_default', $new_show_xmailer_default);
         setPref($data_dir, $username, 'attachment_common_show_images', $new_attachment_common_show_images);
+        setPref($data_dir, $username, 'pf_subtle_link', $new_pf_subtle_link);
+        setPref($data_dir, $username, 'pf_cleandisplay', $new_pf_cleandisplay);
 
         $js_autodetect_results = (isset($new_js_autodetect_results) ? $new_js_autodetect_results : SMPREF_JS_OFF);
         if ($new_javascript_setting == SMPREF_JS_AUTODETECT) {
 
         $js_autodetect_results = (isset($new_js_autodetect_results) ? $new_js_autodetect_results : SMPREF_JS_OFF);
         if ($new_javascript_setting == SMPREF_JS_AUTODETECT) {
@@ -91,7 +93,7 @@
             }
         } else {
             setPref($data_dir, $username, 'javascript_on', $new_javascript_setting);
             }
         } else {
             setPref($data_dir, $username, 'javascript_on', $new_javascript_setting);
-        }  
+        }
 
         do_hook('options_display_save');
 
 
         do_hook('options_display_save');
 
index edaaf3c..22254bb 100644 (file)
         'refresh' => SMOPT_REFRESH_NONE
     );
 
         'refresh' => SMOPT_REFRESH_NONE
     );
 
+    $optvals[SMOPT_GRP_MESSAGE][] = array(
+        'name'    => 'pf_subtle_link',
+        'caption' => _("Printer Friendly: Subtle Link"),
+        'type'    => SMOPT_TYPE_BOOLEAN,
+        'refresh' => SMOPT_REFRESH_NONE
+    );
+
+    $optvals[SMOPT_GRP_MESSAGE][] = array(
+        'name'    => 'pf_cleandisplay',
+        'caption' => _("Printer Friendly: Clean Display"),
+        'type'    => SMOPT_TYPE_BOOLEAN,
+        'refresh' => SMOPT_REFRESH_NONE
+    );
+
     /* Build and output the option groups. */
     $option_groups = createOptionGroups($optgrps, $optvals);
     printOptionGroups($option_groups);
     /* Build and output the option groups. */
     $option_groups = createOptionGroups($optgrps, $optvals);
     printOptionGroups($option_groups);
diff --git a/src/printer_friendly_bottom.php b/src/printer_friendly_bottom.php
new file mode 100644 (file)
index 0000000..1977d4f
--- /dev/null
@@ -0,0 +1,151 @@
+<?php
+
+  /**
+   **  printer_friendly_bottom.php
+   **
+   **  Copyright (c) 1999-2000 The SquirrelMail development team
+   **  Licensed under the GNU GPL. For full terms see the file COPYING.
+   **
+   **  with javascript on, it is the bottom frame of printer_friendly_main.php
+   **  else, it is alone in a new window
+   **
+   **  - this is the page that does all the work, really.
+   **
+   **  $Id$
+   **/
+
+    require_once('../src/validate.php');
+    require_once('../functions/strings.php');
+    require_once('../config/config.php');
+    require_once('../src/load_prefs.php');
+    require_once('../functions/imap.php');
+
+
+    $pf_cleandisplay = getPref($data_dir, $username, 'pf_cleandisplay');
+
+    $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
+    sqimap_mailbox_select($imap_stream, $mailbox);
+    $message = sqimap_get_message($imap_stream, $passed_id, $mailbox);
+
+
+// --start display setup--
+
+     // From and Date are usually fine as they are...
+    $from = decodeHeader($message->header->from);
+    $date = getLongDateString($message->header->date);
+
+     // we can clean these up if the list is too long...
+    $cc = decodeHeader(getLineOfAddrs($message->header->cc));
+    $to = decodeHeader(getLineOfAddrs($message->header->to));
+
+     // and Body and Subject could easily stream off the page...
+    $body = mime_fetch_body($imap_stream, $passed_id, $passed_ent_id);
+    $body = str_replace("\n", "\n", trim(decodeBody($body, $message->header->encoding)));
+    $subject = trim(decodeHeader($message->header->subject));
+
+     // now, if they choose to, we clean up the display a bit...
+    if ( empty($pf_cleandisplay) || $pf_cleandisplay != 'no' )
+    {
+
+        $num_leading_spaces = 9; // nine leading spaces for indentation
+
+         // sometimes I see ',,' instead of ',' seperating addresses *shrug*
+        $cc = pf_clean_string(str_replace(',,', ',', $cc), $num_leading_spaces);
+        $to = pf_clean_string(str_replace(',,', ',', $to), $num_leading_spaces);
+
+         // the body should have no leading zeros
+        $body = pf_clean_string($body, 0);
+
+         // clean up everything else...
+        $subject = pf_clean_string($subject, $num_leading_spaces);
+        $from = pf_clean_string($from, $num_leading_spaces);
+        $date = pf_clean_string($date, $num_leading_spaces);
+
+    } // end cleanup
+
+// --end display setup--
+
+
+// --start browser output--
+
+?>
+
+<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
+<html>
+<head><title>
+    <?php echo _("Printable View"); ?>
+</title></head>
+
+<?php
+
+    if ($theme_css != "")
+    {
+        printf ('<LINK REL="stylesheet" TYPE="text/css" HREF="%s">', $theme_css);
+        echo "\n";
+    }
+
+    printf('<body text="%s" bgcolor="%s" link="%s" vlink="%s" alink="%s">',
+            $color[8], $color[4], $color[7], $color[7], $color[7]);
+
+    echo "\n<pre>";
+
+     // headers
+    echo "   " . _("From") . ': ' . htmlentities($from) . "\n";
+    echo "     " . _("To") . ': ' . htmlentities($to) . "\n";
+    if ( strlen($cc) > 0 ) // only show CC: if it's there...
+        echo "     " . _("CC") . ': ' . htmlentities($cc) . "\n";
+    echo "   " . _("Date") . ': ' . htmlentities($date) . "\n";
+    echo _("Subject") . ': ' . htmlentities($subject) . "\n\n";
+
+     // body
+    echo "<hr noshade size=1>\n";
+    echo htmlentities($body);
+
+// --end browser output--
+
+
+?></pre>
+  </body>
+</html>
+
+<?
+
+// --start pf-specific functions--
+
+
+ // $string = pf_clean_string($string, 9);
+function pf_clean_string ( $unclean_string, $num_leading_spaces ) {
+    global $data_dir, $username;
+
+    $wrap_at = getPref($data_dir, $username, 'wrap_at');
+    $wrap_at = $wrap_at - $num_leading_spaces; // header stuff
+
+    $leading_spaces = '';
+    while ( strlen($leading_spaces) < $num_leading_spaces )
+        $leading_spaces .= ' ';
+
+    $clean_string = '';
+    while ( strlen($unclean_string) > $wrap_at )
+    {
+        $this_line = substr($unclean_string, 0, $wrap_at);
+        if ( strrpos( $this_line, "\n" ) ) // this should NEVER happen with anything but the $body
+        {
+            $clean_string .= substr( $this_line, 0, strrpos( $this_line, "\n" ));
+            $clean_string .= $leading_spaces;
+            $unclean_string = substr($unclean_string, strrpos( $this_line, "\n" ));
+        }
+        else
+        {
+            $clean_string .= substr( $this_line, 0, strrpos( $this_line, ' ' ));
+            $clean_string .= "\n" . $leading_spaces;
+            $unclean_string = substr($unclean_string, (1+strrpos( $this_line, ' ' )));
+        }
+    }
+    $clean_string .= $unclean_string;
+
+    return $clean_string;
+} // end pf_clean_string() function
+
+// --end pf-specific functions
+
+?>
diff --git a/src/printer_friendly_main.php b/src/printer_friendly_main.php
new file mode 100644 (file)
index 0000000..6bade61
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+
+  /**
+   **  printer_friendly_main.php
+   **
+   **  Copyright (c) 1999-2000 The SquirrelMail development team
+   **  Licensed under the GNU GPL. For full terms see the file COPYING.
+   **
+   **  $Id$
+   **/
+
+?><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
+<html>
+  <head>
+    <title>Print Email</title>
+  </head>
+  <frameset rows="50, *" noresize border="0">
+    <frame src="printer_friendly_top.php" name="top_frame" scrolling="off">
+    <frame src="printer_friendly_bottom.php?passed_ent_id=<?php
+  echo $passed_ent_id . '&mailbox=' . urlencode($mailbox) .
+       '&passed_id=' . $passed_id;
+?>" name="bottom_frame">
+  </frameset>
+</html>
diff --git a/src/printer_friendly_top.php b/src/printer_friendly_top.php
new file mode 100644 (file)
index 0000000..3e7376d
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+  /**
+   **  printer_friendly_top.php
+   **
+   **  Copyright (c) 1999-2000 The SquirrelMail development team
+   **  Licensed under the GNU GPL. For full terms see the file COPYING.
+   **
+   **  top frame of printer_friendly_main.php
+   **  displays some javascript buttons for printing & closing
+   **
+   **  $Id$
+   **/
+
+    require_once('../src/validate.php');
+    require_once('../functions/strings.php');
+    require_once('../config/config.php');
+    require_once('../src/load_prefs.php');
+
+?>
+<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
+<html>
+  <head>
+  <script language="javascript">
+  <!--
+    function printPopup() {
+        parent.frames[1].focus();
+        parent.frames[1].print();
+    }
+  -->
+  </script>
+  </head>
+<?php
+
+    if ($theme_css != "")
+    {
+        printf ('<LINK REL="stylesheet" TYPE="text/css" HREF="%s">', $theme_css);
+        echo "\n";
+    }
+
+
+    printf('<body text="%s" bgcolor="%s" link="%s" vlink="%s" alink="%s">',
+        $color[8], $color[3], $color[7], $color[7], $color[7]);
+?>
+    <table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0"><tr><td valign="middle" align="center">
+      <b>
+      <form>
+      <input type="button" value="Print" onClick="printPopup()">
+      <input type="button" value="Close Window" onClick="window.parent.close()">
+      </form>
+      </b>
+    </td></tr></table>
+  </body>
+</html>
index a0e8963..503eca2 100644 (file)
       return -1;
    }
 
       return -1;
    }
 
+
+   // displays a link to a page where the message is displayed
+   // more "printer friendly"
+
+   function printer_friendly_link($subtle) {
+       global $passed_id, $mailbox, $ent_num, $color;
+       global $pf_subtle_link;
+   
+       if ($pf_subtle_link != $subtle) return;
+   
+       if (strlen(trim($mailbox)) < 1)
+           $mailbox = 'INBOX';
+   
+       $params = '?passed_ent_id=' . $ent_num . '&mailbox=' . urlencode($mailbox) .
+                 '&passed_id=' . $passed_id;
+       $text = _("View printable version");
+   
+       if (!$subtle) {
+            // the link is large, on the bottom of the header panel
+            echo '      <tr bgcolor="' . $color[0] . '">' . "\n" .
+                 '        <td class="medText" align="right" valign="top">' . "\n" .
+                 '          &nbsp;' . "\n" .
+                 '        </td><td class="medText" valign="top" colspan="2">'."\n";
+       } else {
+            // the link is subtle, below "view full header"
+            echo '        <br>' . "\n";
+       }
+   
+            // javascript
+       echo '        <script language="javascript">' . "\n" .
+            '        <!--' . "\n" .
+            '        function printFormat() {' . "\n" .
+            '            window.open("../src/printer_friendly_main.php' .
+                         $params . '","Print","width=800,height=600");' . "\n".
+            '        }' . "\n\n" .
+            '        document.write(' . "'" .
+            '          <a href="javascript:printFormat();">' . $text . '</a>' .
+                     "');\n" .
+            '        // -->' . "\n" .
+            '        </script>' . "\n" .
+            // pure html
+            '        <noscript>' . "\n" .
+            '        <a target="_blank" href="../src/printer_friendly_bottom.php' .
+                     $params . '">' .
+                     $text . "</a>\n" .
+            '        </noscript>' . "\n";
+   
+       if (!$subtle) {
+            // the link is large, on the bottom of the header panel
+            echo '        </td>' . "\n" .
+                 '      </tr>' . "\n";
+       }
+   }
+
+   // main of read_boby.php
+
    if (isset($msgs)) {
           $currentArrayIndex = $passed_id;
                /*
    if (isset($msgs)) {
           $currentArrayIndex = $passed_id;
                /*
    } else {
       echo "<a href=\"read_body.php?mailbox=$urlMailbox&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more&view_hdr=1\">" . _("View full header") . "</a>\n";
    }
    } else {
       echo "<a href=\"read_body.php?mailbox=$urlMailbox&passed_id=$passed_id&startMessage=$startMessage&show_more=$show_more&view_hdr=1\">" . _("View full header") . "</a>\n";
    }
+      printer_friendly_link(1); // 1 = subtle link
       do_hook("read_body_header_right");
    echo '</small></TD>' . "\n" .
         ' </TR>' ."\n" .
       do_hook("read_body_header_right");
    echo '</small></TD>' . "\n" .
         ' </TR>' ."\n" .
       }
    }
 
       }
    }
 
+   printer_friendly_link(0); // 0 = unsubtle link
    do_hook("read_body_header");
    echo '</TABLE>' .
         '   </TD></TR>' .
    do_hook("read_body_header");
    echo '</TABLE>' .
         '   </TD></TR>' .