summaryrefslogtreecommitdiff
path: root/apps/mm/controllers/Messages.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/mm/controllers/Messages.class.php')
-rw-r--r--apps/mm/controllers/Messages.class.php98
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