コード例 #1
0
 /**
  * View specific email
  *
  */
 function view()
 {
     $this->addHelper('textile');
     $email = MailContents::findById(get_id());
     if (!$email instanceof MailContent) {
         flash_error(lang('email dnx'));
         ajx_current("empty");
         return;
     }
     if ($email->getIsDeleted()) {
         flash_error(lang('email dnx deleted'));
         ajx_current("empty");
         return;
     }
     if (!$email->canView(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     tpl_assign('email', $email);
     $additional_body = "";
     $attachments = array();
     if ($email->getState() >= 200) {
         $old_memory_limit = ini_get('memory_limit');
         if (php_config_value_to_bytes($old_memory_limit) < 256 * 1024 * 1024) {
             ini_set('memory_limit', '256M');
         }
         $attachments = self::readAttachmentsFromFileSystem($email, $att_ver);
         if ($attachments && is_array($attachments)) {
             foreach ($attachments as &$attach) {
                 if ($att_ver < 2) {
                     $attach["FileName"] = $attach['name'];
                     $attach['size'] = format_filesize(strlen($attach["data"]));
                     unset($attach['name']);
                     unset($attach['data']);
                 } else {
                     $attach["FileName"] = $attach['name'];
                     $attach['size'] = format_filesize(filesize($attach["path"]));
                     unset($attach['name']);
                 }
             }
         } else {
         }
         ini_set('memory_limit', $old_memory_limit);
     } else {
         MailUtilities::parseMail($email->getContent(), $decoded, $parsedEmail, $warnings);
         if (isset($parsedEmail['Attachments'])) {
             $attachments = $parsedEmail['Attachments'];
         } else {
             if ($email->getHasAttachments() && !in_array($parsedEmail['Type'], array('html', 'text', 'delivery-status')) && isset($parsedEmail['FileName'])) {
                 // the email is the attachment
                 $attach = array('Data' => $parsedEmail['Data'], 'Type' => $parsedEmail['Type'], 'FileName' => $parsedEmail['FileName']);
                 $attachments = array($attach);
             }
         }
         $to_remove = array();
         foreach ($attachments as $k => &$attach) {
             // dont show inline images in attachments box
             if (array_var($attach, 'FileDisposition') == 'inline' && array_var($parsedEmail, 'Type') == 'html') {
                 $attach['hide'] = true;
             }
             if (array_var($attach, 'Type') == 'html') {
                 $attach_tmp = $attach['Data'];
                 $attach_tmp = preg_replace('/<html[^>]*[>]/', '', $attach_tmp);
                 $attach_tmp = preg_replace('/<\\/html>/', '', $attach_tmp);
                 $attach_tmp = preg_replace('/<head>*<\\/head>/', '', $attach_tmp);
                 $attach_tmp = preg_replace('/<body[^>]*[>]/', '', $attach_tmp);
                 $attach_tmp = preg_replace('/<\\/body>/', '', $attach_tmp);
                 $additional_body .= $attach_tmp;
                 //break;
             }
             $attach['size'] = format_filesize(strlen($attach["Data"]));
             unset($attach['Data']);
         }
     }
     if ($email->getBodyHtml() != '') {
         $tmp_folder = "/tmp/" . $email->getAccountId() . "_" . logged_user()->getId() . "_" . $email->getId() . "_temp_mail_content_res";
         if (is_dir(ROOT . $tmp_folder)) {
             remove_dir(ROOT . $tmp_folder);
         }
         $parts_array = array_var($decoded, 0, array('Parts' => ''));
         $email->setBodyHtml(self::rebuild_body_html($email->getBodyHtml(), array_var($parts_array, 'Parts'), $tmp_folder) . $additional_body);
     }
     tpl_assign('attachments', $attachments);
     ajx_extra_data(array("title" => $email->getSubject(), 'icon' => 'ico-email'));
     ajx_set_no_toolbar(true);
     if (array_var($_GET, 'replace')) {
         ajx_replace(true);
     }
     if (!$email->getIsRead(logged_user()->getId())) {
         $object_controler = new ObjectController();
         $object_controler->do_mark_as_read_unread_objects(array($email->getId()), true);
     }
     ApplicationReadLogs::createLog($email, null, ApplicationReadLogs::ACTION_READ);
 }