summaryrefslogtreecommitdiff
path: root/src/controllers/Messages.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/controllers/Messages.class.php')
-rw-r--r--src/controllers/Messages.class.php100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/controllers/Messages.class.php b/src/controllers/Messages.class.php
new file mode 100644
index 0000000..86403ae
--- /dev/null
+++ b/src/controllers/Messages.class.php
@@ -0,0 +1,100 @@
+<?php
+
+Router::register('messages', 'Messages', 'index');
+Router::register('messages/index', 'Messages', 'index');
+Router::register('messages/*', 'Messages', 'message');
+
+class Messages extends Controller {
+ public static $msgdir;
+
+ public function __construct() {
+ require_once('MimeMailParser.class.php');
+ $this->msgdir = BASEPATH.'/msg';
+ }
+
+ public function index($routed, $remainder) {
+ $parser = new MimeMailParser();
+ $messages = array();
+ $dh = opendir($this->msgdir);
+ while (($file = readdir($dh)) !== false) {
+ $path = $this->msgdir."/$file";
+ if (is_file($path)) {
+ $parser->setPath($path);
+
+ $date_string = $parser->getHeader('date');
+ $date = strtotime($date_string);
+ if (!isset($messages[$date])) {
+ $messages[$date] = array();
+ }
+ $messages[$date][] =
+ array('id'=>$file,
+ 'subject'=>$parser->getHeader('subject'),
+ 'from'=>$parser->getHeader('from'));
+ }
+ }
+ closedir($dh);
+
+ $this->showView('messages/index', array('messages' => $messages));
+ exit();
+ }
+
+ public function message($routed, $remainder) {
+ global $mm;
+ $uid = $mm->isLoggedIn();
+ if ($uid===false || !$mm->getAuthObj($uid)->isUser()) {
+ $this->http401($routed, $remainder);
+ return;
+ }
+
+ $msg_id = $remainder[0];// We can trust the router that this is set
+ $msg_file = $this->msgdir."/$msg_id";
+ if (!is_file($msg_file)) {
+ $this->http404($routed, $remainder);
+ return;
+ }
+
+ @$part = $remainder[1];
+ @$subpart = $remainder[2];
+ $parser = new MimeMailParser();
+ $parser->setPath($msg_file);
+
+ switch ($part) {
+ case '':
+ $this->showView('messages/frame',
+ array('msg_id'=>$msg_id,
+ 'parser'=>$parser,
+ 'msgdir'=>$this->msgdir,
+ ));
+ break;
+ case 'body':
+ require_once('Mime.class.php');
+ header('Content-type: '.Mime::ext2mime(PAGE_EXT));
+ $map = array('html'=>'html',
+ 'txt' =>'text');
+ echo $parser->getMessageBody($map[PAGE_EXT]);
+ break;
+ case 'attachment':
+ $attachment_id = $subpart;
+ $attachments = $parser->getAttachments();
+ $attachment = $attachments[$attachment_id];
+
+ $type = $attachment->getContentType();
+ $filename = $attachment->getFilename();
+
+ header('Content-Type: '.$type);
+ header('Content-Disposition: attachment; filename='.$filename );
+ while($bytes = $attachment->read()) {
+ echo $bytes;
+ }
+ break;
+ default:
+ array_push($routed, array_shift($remainder));
+ $this->http404($routed, $remainder);
+ }
+ }
+
+ public function http401($routed, $remainder) {
+ global $mm;
+ $this->showView('messages/401', array('uid'=>$mm->isLoggedIn()));
+ }
+} \ No newline at end of file