diff --git a/include/class.file.php b/include/class.file.php index 5bbd3d8859b1303648bc6464a9075040b8a1e3c9..419a2820922f6405f83d236b8cc47934f566dbc5 100644 --- a/include/class.file.php +++ b/include/class.file.php @@ -197,6 +197,18 @@ class AttachmentFile extends VerySimpleModel { $options); } + // Generates full download URL for external sources. + // e.g. https://domain.tld/file.php?args=123 + function getExternalDownloadUrl($options=array()) { + global $cfg; + + $download = self::getDownloadUrl($options); + // Separate URL handle and args + list($handle, $args) = explode('file.php?', $download); + + return (string) rtrim($cfg->getBaseUrl(), '/').'/file.php?'.$args; + } + static function generateDownloadUrl($id, $key, $hash, $options = array()) { // Expire at the nearest midnight, allow at least12 hrs access diff --git a/include/class.thread.php b/include/class.thread.php index 9488835a3d80c68f1a8a949f2d21094f4b414368..343b3e9005689e01a11ef5611e3a00179b776f82 100644 --- a/include/class.thread.php +++ b/include/class.thread.php @@ -2964,6 +2964,14 @@ implements TemplateVariable { return $resp; } + function __toString() { + return $this->asVar(); + } + + function asVar() { + return $this->getVar('complete'); + } + function getVar($name) { switch ($name) { case 'original': @@ -2983,12 +2991,23 @@ implements TemplateVariable { if ($entry) return $entry->getBody(); + break; + case 'complete': + $content = ''; + $thread = $this; + ob_start(); + include INCLUDE_DIR.'client/templates/thread-export.tmpl.php'; + $content = ob_get_contents(); + ob_end_clean(); + return $content; + break; } } static function getVarScope() { return array( + 'complete' => __('Thread Correspondence'), 'original' => array('class' => 'MessageThreadEntry', 'desc' => __('Original Message')), 'lastmessage' => array('class' => 'MessageThreadEntry', 'desc' => __('Last Message')), ); diff --git a/include/client/templates/thread-export.tmpl.php b/include/client/templates/thread-export.tmpl.php new file mode 100644 index 0000000000000000000000000000000000000000..5914a88da94a48a5da28c31dd1685a4e2f438ae4 --- /dev/null +++ b/include/client/templates/thread-export.tmpl.php @@ -0,0 +1,93 @@ +<?php +global $cfg; + +$entryTypes = array( + 'M' => array('color' => '#0088cc'), + 'R' => array('color' => '#e65524'), + ); + +AttachmentFile::objects()->filter(array( + 'attachments__thread_entry__thread__id' => $thread->getId(), + 'attachments__thread_entry__type__in' => array_keys($entryTypes) + ))->all(); + +$entries = $thread->getEntries(); +$entries->filter(array('type__in' => array_keys($entryTypes))); +?> +<style type="text/css"> + div {font-family: sans-serif;} +</style> +<div style="width: 100%; margin: 0; padding: 0;"> + <div style="padding:10px;"> + <p style="font-family: sans-serif; font-size:12px; color:#999;"> </p> + </div> + <table width="100%" cellpadding="0" cellspacing="0" border="0"> + <tbody> + <tr> + <td></td> + </tr> + <?php + foreach ($entries as $entry) { + $user = $entry->getUser() ?: $entry->getStaff(); + $name = $user ? $user->getName() : $entry->poster; + $color = $entryTypes[$entry->type]['color']; + ?> + <tr> + <td style=" border-top: 1px dashed #999;"> + <div style="background-color:#f7f7f7; padding:10px 20px;"> + <p style="font-family: sans-serif; padding:0; margin:0; color:<?php echo $color; ?>;"> + <strong><?php echo $name; ?></strong> + <span style="color:#888; font-size:12px; padding-left: 20px;"><?php + echo $entry->title; + ?> + </span> + </p> + <p style="font-family: sans-serif; padding:0; margin:0; color:#888; font-size:12px;"> + <?php + echo Format::daydatetime($entry->created); + ?> + </p> + </div> + <div style="padding:2px 20px;"> + <p style="font-family: sans-serif; font-size:14px; color:#555;"> + <?php + echo $entry->getBody()->display('email'); + ?> + </p> + <?php + if ($entry->has_attachments) { ?> + <p style="font-family: sans-serif; font-size:12px; line-height:20px; color:#888;"> + <?php echo __('Attachments'); ?> + <br /> + <?php + foreach ($entry->attachments as $a) { + if ($a->inline) continue; + $size = ''; + if ($a->file->size) + $size = sprintf('<small style="color:#ccc;"> (%s)</small>', + Format::file_size($a->file->size)); + + $filename = Format::htmlchars($a->getFilename()); + echo sprintf('<a href="%s" download="%s" + style="font-size:11px; color:#0088cc;" + target="_blank">%s</a> %s<br/>', + $a->file->getExternalDownloadUrl(), + $filename, + $filename, + $size); + } + ?> + </p> + <?php + } ?> + </div> + </td> + </tr> + <?php + } ?> + </tbody> + </table> + <div style="font-family: sans-serif; margin: 2px 0 14px 0; padding: 10px ; border-top: 1px solid #999; font-size:12px; color:#888;"> + + </div> +</div>