Author: Michael Slusarz (slusarz@horde.org)
Example #1
0
 /**
  * @throws IMP_Exception
  */
 protected function _init()
 {
     global $injector, $notification, $page_output;
     if (!$this->indices) {
         throw new IMP_Exception(_("No message index given."));
     }
     $page_output->addScriptFile('message.js');
     $page_output->addScriptFile('external/CustomElements.js');
     $page_output->addScriptFile('external/time-elements.js');
     $page_output->addScriptFile('textarearesize.js', 'horde');
     $page_output->addScriptFile('toggle_quotes.js', 'horde');
     $page_output->addScriptPackage('IMP_Script_Package_Imp');
     $page_output->addThemeStylesheet('message.css');
     $page_output->addThemeStylesheet('message_view.css');
     $js_vars = array();
     switch ($this->vars->actionID) {
         case 'strip_attachment':
             try {
                 $this->indices = new IMP_Indices_Mailbox($this->indices->mailbox, $this->indices->stripPart($this->vars->id));
                 $js_vars['-ImpMessage.strip'] = 1;
                 $notification->push(_("Attachment successfully stripped."), 'horde.success');
             } catch (IMP_Exception $e) {
                 $notification->push($e);
             }
             break;
     }
     try {
         $show_msg = new IMP_Contents_Message($this->indices);
         $msg_res = $show_msg->showMessage();
     } catch (IMP_Exception $e) {
         $notification->notify(array('listeners' => array('status', 'audio')));
         echo Horde::wrapInlineScript(array('parent.close()'));
         exit;
     }
     /* Add 'maillog' and 'poll' data to the AJAX queue. */
     $ajax_queue = $injector->getInstance('IMP_Ajax_Queue');
     $ajax_queue->maillog($this->indices);
     $ajax_queue->poll($this->indices->mailbox);
     list(, $buid) = $this->indices->buids->getSingle();
     /* Need to be dynamically added, since formatting needs to be applied
      * via javascript. */
     foreach (array('from', 'to', 'cc', 'bcc') as $val) {
         if ($tmp = $show_msg->getAddressHeader($val)) {
             $js_vars['ImpMessage.' . $val] = $tmp;
         }
     }
     if ($resent = $show_msg->getResentData()) {
         $resent_js = array();
         foreach ($resent as $val) {
             $resent_js[] = array('date' => $val['date']->format($val['date']::DATE_LOCAL), 'from' => $show_msg->getAddressHeader($val['from']));
         }
         $js_vars['ImpMessage.resent'] = $resent_js;
     }
     if (isset($msg_res['log'])) {
         $js_vars['ImpMessage.log'] = $msg_res['log'];
     }
     $list_info = $show_msg->contents->getListInformation();
     if (!empty($list_info['exists'])) {
         $js_vars['ImpMessage.reply_list'] = true;
         $this->view->listinfo = Horde::popupJs(IMP_Basic_Listinfo::url(array('buid' => $buid, 'mailbox' => $this->indices->mailbox)), array('urlencode' => true));
     }
     $js_vars['ImpMessage.buid'] = $buid;
     $js_vars['ImpMessage.mbox'] = $this->indices->mailbox->form_to;
     if (isset($msg_res['atc'])) {
         $js_vars['ImpMessage.msg_atc'] = $msg_res['atc'];
         $this->js_text['atc_downloadall'] = _("Download All (%s)");
     }
     if (isset($msg_res['md'])) {
         $js_vars['ImpMessage.msg_md'] = $msg_res['md'];
     }
     $js_vars['ImpMessage.tasks'] = $injector->getInstance('Horde_Core_Factory_Ajax')->create('imp', $this->vars)->getTasks();
     $page_output->addInlineJsVars($js_vars);
     if (isset($msg_res['js'])) {
         $page_output->addInlineScript(array_filter($msg_res['js']), true);
     }
     $this->_pages[] = 'message';
     $subject = $show_msg->getSubject();
     $this->view->subject = isset($subject['subjectlink']) ? $subject['subjectlink'] : $subject['subject'];
     $this->title = $subject['title'];
     /* Determine if compose mode is disabled. */
     if (IMP_Compose::canCompose()) {
         $this->view->qreply = $injector->getInstance('IMP_Dynamic_Compose_Common')->compose($this, array('title' => _("Message") . ': ' . $subject['subject']));
         $this->_pages[] = 'qreply';
         $this->js_conf['qreply'] = 1;
     }
     $page_output->noDnsPrefetch();
     $this->view->show_delete = $this->indices->mailbox->access_deletemsgs;
     list($real_mbox, ) = $this->indices->getSingle();
     $this->view->show_innocent = $real_mbox->innocent_show;
     $this->view->show_spam = $real_mbox->spam_show;
     $this->view->show_view_all = empty($msg_res['onepart']);
     $this->view->show_view_source = $injector->getInstance('Horde_Core_Perms')->hasAppPermission('view_msg_source');
     $this->view->save_as = $show_msg->getSaveAs();
     if ($date = $show_msg->getDateOb()) {
         $this->view->datestamp = $date->format($date::DATE_ISO_8601);
         $this->view->fulldate = $date->format($date::DATE_FORCE);
         $this->view->localdate = $date->format($date::DATE_LOCAL);
         $this->view->addHelper('Text');
     }
     if ($this->view->user_hdrs = $show_msg->getUserHeaders()) {
         $this->view->addHelper('Text');
     }
     $this->view->msgtext = $msg_res['msgtext'];
     Horde::startBuffer();
     $notification->notify(array('listeners' => array('status', 'audio')));
     $this->view->status = Horde::endBuffer();
     $this->view->title = $this->title;
 }
Example #2
0
 /**
  * AJAX action: Return the inline display text for a given MIME ID of
  * a message.
  *
  * See the list of variables needed for IMP_Ajax_Application#changed() and
  * IMP_Ajax_Application#checkUidvalidity(). Mailbox/indices form
  * parameters needed. Additional variables used:
  *   - mimeid: (string) The MIME ID to return.
  *
  * @return object  An object with the following entries:
  * <pre>
  *   - md: (array) Metadata information.
  *   - mimeid: (string) The base MIME ID of the text.
  *   - puids: (array) See IMP_Ajax_Application#previewUids().
  *   - text: (string) Inline Message text of the part.
  * </pre>
  */
 public function inlineMessageOutput()
 {
     $result = new stdClass();
     $show_msg = new IMP_Contents_Message($this->_base->indices);
     $msg_output = $show_msg->getInlineOutput($this->vars->mimeid);
     $result = new stdClass();
     $result->md = $msg_output['metadata'];
     $result->mimeid = $this->vars->mimeid;
     $result->puids = $this->_base->previewUids();
     $result->text = $msg_output['msgtext'];
     return $result;
 }
Example #3
0
 /**
  * Add message data to output.
  *
  * @param IMP_Indices $indices  Index of the message.
  * @param array $opts           Additional options:
  * <pre>
  *   - is_list: (boolean) Do list check?
  *   - peek: (boolean) Don't set seen flag?
  *   - user_headers: (boolean) Add user headers?
  * </pre>
  */
 public function message(IMP_Indices $indices, array $opts = array())
 {
     global $page_output;
     try {
         $show_msg = new IMP_Contents_Message($indices, !empty($opts['peek']));
         $msg = (object) $show_msg->showMessage();
         foreach (array('from', 'to', 'cc', 'bcc') as $val) {
             if ($tmp = $show_msg->getAddressHeader($val)) {
                 $msg->{$val} = $tmp;
             }
         }
         $subject = $show_msg->getSubject();
         $msg->subject = $subject['subject'];
         if ($subject['subject'] !== $subject['title']) {
             $msg->title = $subject['title'];
         }
         if (isset($subject['subjectlink'])) {
             $msg->subjectlink = $subject['subjectlink'];
         }
         if ($date = $show_msg->getDateOb()) {
             $msg->datestamp = $date->format($date::DATE_ISO_8601);
             $msg->localdate = $date->format($date::DATE_LOCAL);
         }
         if ($resent = $show_msg->getResentData()) {
             $msg->resent = array();
             foreach ($resent as $val) {
                 $msg->resent[] = array('date' => $val['date']->format($val['date']::DATE_LOCAL), 'from' => $show_msg->getAddressHeader($val['from']));
             }
         }
         $this->maillog($indices);
         $show_msg->addChangedFlag();
         if (!empty($opts['user_headers'])) {
             $msg->headers = $show_msg->getUserHeaders();
         }
         if (!empty($opts['is_list'])) {
             $list_info = $show_msg->contents->getListInformation();
             if (!empty($list_info['exists'])) {
                 $msg->is_list = true;
             }
         }
         $msg->save_as = strval($show_msg->getSaveAs()->setRaw(true));
         /* Need to grab cached inline scripts. */
         Horde::startBuffer();
         $page_output->outputInlineScript(true);
         if ($js_inline = Horde::endBuffer()) {
             $msg->js = array($js_inline);
         }
         if ($indices instanceof IMP_Indices_Mailbox) {
             $indices = $indices->buids;
         }
     } catch (Exception $e) {
         Horde::log($e, 'DEBUG');
     }
     foreach ($indices as $val) {
         foreach ($val->uids as $val2) {
             $ob = new stdClass();
             $ob->buid = $val2;
             if (isset($msg)) {
                 $ob->data = $msg;
             } else {
                 $e = new IMP_Ajax_Application_Viewport_Error($val->mbox);
                 $ob->data = $e->toObject();
             }
             $ob->mbox = $val->mbox->form_to;
             $this->_messages[] = $ob;
         }
     }
 }