diff options
author | Luke Shumaker <LukeShu@sbcglobal.net> | 2012-01-08 17:45:50 -0800 |
---|---|---|
committer | Luke Shumaker <LukeShu@sbcglobal.net> | 2012-01-08 17:45:50 -0800 |
commit | 4c58c41d818918b1690b56f05876d9af642354c0 (patch) | |
tree | b07c0f2925a5753ab3c34379db5c90c5dc38bad1 /apps/mm/controllers | |
parent | 83e460cdc3fc09867a3adb48c3d0894579dd3050 (diff) | |
parent | 3d64793a1ee45857856be1cd71c3a0a040a3e869 (diff) |
Diffstat (limited to 'apps/mm/controllers')
-rw-r--r-- | apps/mm/controllers/Messages.class.php | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/apps/mm/controllers/Messages.class.php b/apps/mm/controllers/Messages.class.php new file mode 100644 index 0000000..d9decc9 --- /dev/null +++ b/apps/mm/controllers/Messages.class.php @@ -0,0 +1,98 @@ +<?php +require_once('Login.class.php'); +require_once('Auth.class.php'); +require_once('Database.class.php'); +require_once('Message.class.php'); +require_once('MimeMailParser.class.php'); + +Router::register('messages', 'Messages', 'index'); +Router::register('messages/index', 'Messages', 'index'); +Router::register('messages/*', 'Messages', 'message'); + +class Messages extends Controller { + private $msgdir; + + public function __construct() { + $db = Database::getInstance(); + $this->msgdir = $db->getSysConf('msgdir'); + } + + 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) { + $uid = Login::isLoggedIn(); + if ($uid===false || !Auth::getInstance($uid)->isUser()) { + $this->http401($routed, $remainder); + return; + } + + $msg_id = $remainder[0];// We can trust the router that this is set + $msg = new Message($msg_id); + if ($msg === false) { + $this->http404($routed, $remainder); + return; + } + + @$part = $remainder[1]; + @$subpart = $remainder[2]; + + switch ($part) { + case '': + $this->showView('messages/frame', + array('msg'=>$msg)); + break; + case 'body': + require_once('Mime.class.php'); + header('Content-type: '.Mime::ext2mime(PAGE_EXT)); + $map = array('html'=>'html', + 'txt' =>'text'); + echo $msg->getMessageBody($map[PAGE_EXT]); + break; + case 'attachment': + $attachment_id = $subpart; + $attachments = $msg->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) { + $this->showView('messages/401', array('uid'=>Login::isLoggedIn())); + } +}
\ No newline at end of file |