1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
13:
14: 15: 16: 17: 18: 19: 20: 21: 22:
23: class IMP_Dynamic_Message extends IMP_Dynamic_Base
24: {
25: 26: 27:
28: protected function _init()
29: {
30: global $conf, $injector, $notification, $page_output;
31:
32: if (!$this->indices) {
33: throw new IMP_Exception(_("No message index given."));
34: }
35:
36: $page_output->addScriptFile('message-dimp.js');
37: $page_output->addScriptFile('textarearesize.js', 'horde');
38: $page_output->addScriptFile('toggle_quotes.js', 'horde');
39:
40: $page_output->addScriptPackage('IMP_Script_Package_Imp');
41:
42: $js_vars = array();
43:
44: switch ($this->vars->actionID) {
45: case 'strip_attachment':
46: try {
47: $this->indices = new IMP_Indices_Mailbox(
48: $this->indices->mailbox,
49: $injector->getInstance('IMP_Message')->stripPart($this->indices, $this->vars->id)
50: );
51: $js_vars['-DimpMessage.strip'] = 1;
52: $notification->push(_("Attachment successfully stripped."), 'horde.success');
53: } catch (IMP_Exception $e) {
54: $notification->push($e);
55: }
56: break;
57: }
58:
59: try {
60: $show_msg = new IMP_Ajax_Application_ShowMessage($this->indices);
61: $msg_res = $show_msg->showMessage(array(
62: 'headers' => array_diff(array_keys($injector->getInstance('IMP_Message_Ui')->basicHeaders()), array('subject')),
63: 'preview' => false
64: ));
65: } catch (IMP_Exception $e) {
66: $notification->notify(array(
67: 'listeners' => array('status', 'audio')
68: ));
69: echo Horde::wrapInlineScript(array(
70: 'parent.close()'
71: ));
72: exit;
73: }
74:
75: $ajax_queue = $injector->getInstance('IMP_Ajax_Queue');
76: $ajax_queue->poll($this->indices->mailbox);
77:
78: list(,$buid) = $this->indices->buids->getSingle();
79:
80: foreach (array('from', 'to', 'cc', 'bcc', 'replyTo', 'log') as $val) {
81: if (!empty($msg_res[$val])) {
82: $js_vars['DimpMessage.' . $val] = $msg_res[$val];
83: }
84: }
85: if (!empty($msg_res['list_info']['exists'])) {
86: $js_vars['DimpMessage.reply_list'] = true;
87: $this->view->listinfo = Horde::popupJs(
88: IMP_Basic_Listinfo::url(array(
89: 'buid' => $buid,
90: 'mailbox' => $this->indices->mailbox
91: )), array(
92: 'urlencode' => true
93: )
94: );
95: }
96: $js_vars['DimpMessage.buid'] = $buid;
97: $js_vars['DimpMessage.mbox'] = $this->indices->mailbox->form_to;
98: if (isset($msg_res['md'])) {
99: $js_vars['DimpMessage.msg_md'] = $msg_res['md'];
100: }
101: $js_vars['DimpMessage.tasks'] = $injector->getInstance('Horde_Core_Factory_Ajax')->create('imp', $this->vars)->getTasks();
102:
103: $page_output->addInlineJsVars($js_vars);
104: if (isset($msg_res['js'])) {
105: $page_output->addInlineScript(array_filter($msg_res['js']), true);
106: }
107:
108: $this->_pages[] = 'message';
109:
110:
111: if (IMP_Compose::canCompose()) {
112: $this->view->qreply = $injector
113: ->getInstance('IMP_Dynamic_Compose_Common')
114: ->compose(
115: $this,
116: array('title' => _("Message") . ': ' . $msg_res['subject']));
117:
118: $this->_pages[] = 'qreply';
119:
120: $this->js_conf['qreply'] = 1;
121: }
122:
123: $page_output->noDnsPrefetch();
124:
125: $this->view->show_delete = $this->indices->mailbox->access_deletemsgs;
126:
127: list($real_mbox,) = $this->indices->getSingle();
128: $this->view->show_innocent = $real_mbox->innocent_show;
129: $this->view->show_spam = $real_mbox->spam_show;
130:
131: $this->view->show_view_all = empty($msg_res['onepart']);
132: $this->view->show_view_source = !empty($conf['user']['allow_view_source']);
133:
134: $this->view->save_as = $msg_res['save_as'];
135: $this->view->subject = isset($msg_res['subjectlink'])
136: ? $msg_res['subjectlink']
137: : $msg_res['subject'];
138:
139: $hdrs = array();
140: foreach ($msg_res['headers'] as $val) {
141: $tmp = array_filter(array(
142: 'id' => (isset($val['id']) ? 'msgHeader' . $val['id'] : null),
143: 'label' => $val['name'],
144: 'val' => $val['value']
145: ));
146:
147: if (isset($val['id']) && ($val['id'] === 'Date')) {
148: $this->view->addHelper('Text');
149: $tmp['print'] = $msg_res['fulldate'];
150: }
151:
152: $hdrs[] = $tmp;
153: }
154: $this->view->hdrs = $hdrs;
155:
156: if (isset($msg_res['atc_label'])) {
157: $this->view->atc_label = $msg_res['atc_label'];
158: if (isset($msg_res['atc_list'])) {
159: $this->view->atc_list = $msg_res['atc_list'];
160: } else {
161: $this->view->atc_list = array();
162: }
163: if (isset($msg_res['atc_download'])) {
164: $this->view->atc_download = $msg_res['atc_download'];
165: }
166: } else {
167: $this->view->atc_list = array();
168: }
169:
170: $this->view->msgtext = $msg_res['msgtext'];
171:
172: Horde::startBuffer();
173: $notification->notify(array(
174: 'listeners' => array('status', 'audio')
175: ));
176: $this->view->status = Horde::endBuffer();
177:
178: $this->title = $msg_res['title'];
179: $this->view->title = $this->title;
180: }
181:
182: 183:
184: public static function url(array $opts = array())
185: {
186: return Horde::url('dynamic.php')->add('page', 'message');
187: }
188:
189: }
190: