source: trunk/mobile/inc/class.mobilemail.inc.php @ 488

Revision 488, 16.1 KB checked in by rafaelraymundo, 16 years ago (diff)
  • Insercao da data ao listar os emails
  • Alterada a paginacao, para que nao mostre um link por pagina
  • Algumas alteracoes de layout(remocao de sublinhados nos links, tratamento do hr no css)
Line 
1<?php
2        /**************************************************************************\
3        * eGroupWare                                                               *
4        * http://www.egroupware.org                                                *
5        * The file written by Mário César Kolling <mario.kolling@serpro.gov.br>    *
6        * --------------------------------------------                             *
7        *  This program is free software; you can redistribute it and/or modify it *
8        *  under the terms of the GNU General Public License as published by the   *
9        *  Free Software Foundation; either version 2 of the License, or (at your  *
10        *  option) any later version.                                              *
11        \**************************************************************************/
12
13        //TODO: Criar a Classe Widget.
14
15        include_once(PHPGW_INCLUDE_ROOT.'/expressoMail1_2/inc/class.imap_functions.inc.php');
16
17        // Classe principal do Mini Mail
18        class mobilemail{
19
20                // Define as funções públicas
21                var $public_functions = array(
22                        'mail_list'             => True,
23                        'change_folder' => True,
24                        'change_page'   => True,
25                        'show_msg'              => True,
26                );
27
28                var $folders; // Pastas imap
29                var $current_folder; // Pasta corrente
30                var $current_page; // Página corrente da lista de e-mails da pasta corrente
31                var $imap_functions; // Variável que recebe um objeto do tipo class.imap_functions.inc.php
32                var $allowed_tags = '<p><a><br><em><strong><ol><li><ul><div><font>'; // Tags html que não serão removidas
33                        // ao mostrar corpo do e-mail
34
35
36                /*
37                 * @function mobilemail
38                 * @abstract Método construtor da classe principal do Mini Mail
39                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
40                 */
41                function mobilemail()
42                {
43
44                        // Recupera atributos da classe gravados na sessão
45                        $folders = $GLOBALS['phpgw']->session->appsession('mobilemail.folders','mobile');
46                        $current_folder = $GLOBALS['phpgw']->session->appsession('mobilemail.current_folder','mobile');
47                        $current_page = $GLOBALS['phpgw']->session->appsession('mobilemail.current_page','mobile');
48
49                        // Inicializa a classe class.imap_functions.inc.php
50                        $this->imap_functions = new imap_functions();
51
52                        // Testa a existência dos atributos da classe recuperadas da sessão, e as carrega ou inicializa.
53                        if ($folders)
54                        {
55                                $this->folders = $folders;
56                        }
57                        else
58                        {
59                                $this->folders = $this->imap_functions->get_folders_list();
60                        }
61
62                        if ($current_folder)
63                        {
64                                $this->current_folder = $current_folder;
65                        }
66                        else
67                        {
68                                $this->current_folder = 0; // Define o folder INBOX como o folder corrente
69                        }
70
71                        if ($current_page)
72                        {
73                                $this->current_page = $current_page;
74                        }
75                        else
76                        {
77                                $this->current_page = 1; // Define a primeira página como página padrão
78                        }
79
80                }
81
82                /*
83                 * @function save_session
84                 * @abstract Salva os atributos da classe na sessão
85                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
86                 */
87                function save_session()
88                {
89
90                        $GLOBALS['phpgw']->session->appsession('mobilemail.folders','mobile',$this->folders);
91                        $GLOBALS['phpgw']->session->appsession('mobilemail.current_folder','mobile',$this->current_folder);
92                        $GLOBALS['phpgw']->session->appsession('mobilemail.current_page','mobile',$this->current_page);
93
94                }
95
96                /*
97                 * @function change_page
98                 * @abstract Troca a página de exibição da lista de e-mails, e mostra a nova página
99                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
100                 */
101                function change_page()
102                {
103                        if (isset($_GET['page']))
104                        {
105                                $this->current_page = $_GET['page'];
106                        }
107                        $this->mail_list();
108                        $this->save_session();
109                }
110
111                /*
112                 * @function change_folder
113                 * @abstract Troca a pasta do imap, e mostra a primeira página da nova pasta
114                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
115                 */
116                function change_folder()
117                {
118                        $folder = $_GET['folder'];
119                        if (isset($folder))
120                        {
121                                $this->current_folder = $folder;
122                                $this->current_page = 1;
123                        }
124                        $this->mail_list();
125                        $this->save_session();
126                }
127
128                /*
129                 * @function show_msg
130                 * @abstract Mostra a mensagem de e-mail requisitada
131                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
132                 */
133                 // TODO: retirar msg_folder dos parâmentros necessários no GET e usar $this->current_folder
134                function show_msg()
135                {
136                        $params = array();
137
138                        //TODO: testar chamar sem parâmetros para determinar se ocorre algum problema
139                        if (isset($_GET['msg_number']) && isset($_GET['msg_folder']))
140                        {
141                                $params = array(
142                                        'msg_number' => $_GET['msg_number'],
143                                        'msg_folder' => $_GET['msg_folder'],
144                                );
145                        }
146
147                        $msg = $this->imap_functions->get_info_msg($params);
148
149                        // Carrega o template
150                        $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
151                        $p->set_file(
152                                Array(
153                                        'view_msg_t' => 'view_msg.tpl'
154                                )
155                        );
156                        $p->set_block('view_msg_t', 'mail_header');
157                        $p->set_block('view_msg_t', 'mail_body');
158                        $p->set_block('view_msg_t', 'mail_footer');
159                        $p->set_block('view_msg_t', 'attachment_list');
160                        $p->set_block('view_msg_t', 'begin_anchor');
161                        $p->set_block('view_msg_t', 'end_anchor');
162
163                        // Define o cabeçalho do e-mail
164                        $p->set_var('from_label', lang("From"));
165                        $p->set_var('from', $msg['from']['full']);
166                        $p->set_var('to_label', lang("To"));
167                        $p->set_var('to', $msg['toaddress2']);
168                        $p->set_var('subject_label', lang("Subject"));
169                        $p->set_var('subject', $msg['subject']);
170                        $p->set_var('date_label', lang("Date"));
171                        $p->set_var('date', $msg['fulldate']);
172
173
174                        // Mostra o corpo do e-mail
175                        $p->set_var('body', strip_tags($msg['body'], $this->allowed_tags)); // Usa a função strip_tags() para filtrar
176                                // as tags que estão presentes no corpo do e-mail.
177                        $p->set_var('link_text', lang("Return"));
178                        $p->set_var('link', "index.php?menuaction=mobile.mobilemail.mail_list");
179
180                        if (!empty($msg['attachments']) && !empty($msg['attachments']['names']))
181                        {
182                                $p->set_var('attachment_message', lang('This message have attachment(s)'));
183                        }
184                        else
185                        {
186                                $p->set_var('attachment_message', lang('This message don\'t have attachment(s)'));
187                        }
188
189                        $p->parse('view_msg_t', 'end_anchor');
190                        $p->parse('view_msg_t', 'begin_anchor');
191                        //$p->pfp('view_msg_t', 'mail_header');
192                        $p->pfp('out', 'mail_header');
193                        //$p->pfp('view_msg_t', 'mail_body');
194                        $p->pfp('out', 'mail_body');
195                        //$p->pfp('view_msg_t', 'attachment_list');
196                        $p->pfp('out', 'attachment_list');
197                        //$p->pfp('view_msg_t', 'mail_footer');
198                        $p->pfp('out', 'mail_footer');
199
200                }
201
202                /*
203                 * @function index
204                 * @abstract Página inicial da aplicação mobilemail, mantém o estado atual. Ou seja, mostra lista de e-mails
205                 * do folder e página definidos pelos parâmetros current_folder e current_page.
206                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
207                 */
208                 // TODO: Talvez seja melhor voltar sempre para o Inbox e primeira página
209                function index()
210                {
211
212                        $this->print_folder_selection();
213                        $this->mail_list();
214                        $this->save_session();
215
216                }
217
218                /*
219                 * @function print_folder_selection
220                 * @abstract Imprime o folder corrente (INBOX)
221                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
222                 */
223                function print_folder_selection()
224                {
225
226                        $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
227                        $p->set_file(
228                                Array(
229                                        'mobilemail_t' => 'mobilemail.tpl'
230                                )
231                        );
232                        $p->set_block('mobilemail_t', 'inbox_folder_list');
233                        $p->set_var('lang_folder', lang('Folder'));
234                        $p->set_var('lang_inbox', lang('Inbox'));
235                        //$p->set_var('folder_items', $folder_items);
236                        $p->parse('mobilemail_t', 'inbox_folder_list');
237                        $p->pfp('out', 'mobilemail_t');
238
239                }
240
241                /*
242                 * @function old_print_folder_selection
243                 * @abstract Imprime na tela a caixa de seleção de folders
244                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
245                 */
246                function old_print_folder_selection()
247                {
248
249                        // Processa as options
250                        $folder_items = '';
251
252                        foreach ($this->folders as $i => $j)
253                        {
254
255                                $option_selected = '';
256                                $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
257                                $p->set_file(
258                                        Array(
259                                                'mobilemail_t' => 'mobilemail.tpl'
260                                        )
261                                );
262                                $p->set_block('mobilemail_t', 'folder_item');
263
264                                if (is_numeric($i))
265                                {
266                                        if ($i == $this->current_folder)
267                                        {
268                                                 $option_selected = 'selected="selected"';
269                                        }
270
271                                        $p->set_var('option_selected', $option_selected);
272                                        $p->set_var('folder_id', $j['folder_id']);
273                                        $p->set_var('folder_name', $j['folder_id']); // Mudar... provavelmente usar preg_replace
274                                                                                                                                 // para substituir cpf pelo nome do usuário.
275
276                                        if ($j['folder_unseen'] > 0)
277                                        {
278                                                $p->set_var('folder_unseen', ' - ('.$j['folder_unseen'].')');
279                                        }
280
281                                        $folder_items .= $p->fp('mobile_t', 'folder_item');
282                                }
283
284                        }
285
286                        // Processa o select
287                        $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
288                        $p->set_file(
289                                Array(
290                                        'mobilemail_t' => 'mobilemail.tpl'
291                                )
292                        );
293                        $p->set_block('mobilemail_t', 'folder_list');
294                        $p->set_var('folder_items', $folder_items);
295                        $p->parse('mobilemail_t', 'folder_list');
296                        $p->pfp('out', 'mobilemail_t');
297
298                }
299
300                /*
301                 * @function mail_list
302                 * @abstract Imprime a lista de e-mails
303                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
304                 */
305                function mail_list()
306                {
307
308                        $this->messages_per_page = 10; //TODO: Pegar esse valor de preferences
309//              var $pages;
310//              var $actual_page;
311//              var $number_of_messages;
312
313                        if (!isset($this->number_of_messages))
314                        {
315                                $params = array(
316                                        'folder' => $this->folders[$this->current_folder]['folder_id'],
317                                );
318                                $this->number_of_messages = $this->imap_functions->get_num_msgs($params);
319                        }
320
321                        // Recalcular as páginas
322                        $this->pages = ceil($this->number_of_messages/$this->messages_per_page);
323                        $page = $this->current_page;
324
325                        $params = array(
326                                'folder'                        => $this->folders[$this->current_folder]['folder_id'],
327                                'msg_range_begin'       => $this->current_page * 10 - 9,
328                                'msg_range_end'         => $this->current_page * 10,
329                                'sort_box_type'         => 'SORTARRIVAL',
330                                'sort_box_reverse'      => 1
331                        );
332
333                        $messages = $this->imap_functions->get_range_msgs2($params);
334
335                        $this->print_mails_list($messages);
336                        $this->print_page_navigation($this->pages, $this->current_page);
337
338                }
339
340                /*
341                 * @function print_mails_list
342                 * @abstract Imprime a lista de mensagens
343                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
344                 * @param array Um array com a lista de mensagens recuperado por $this->imap_functions->get_range_msgs2($params)
345                 */
346                function print_mails_list($messages)
347                {
348
349                        // Cria a lista de e-mails
350                        $mail_rows = '';
351                        if ($this->number_of_messages != 0)
352                        {
353                                foreach ($messages as $index => $msg)
354                                {
355                                        $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
356                                        $p->set_file(
357                                                Array(
358                                                        'mobilemail_t' => 'mobilemail.tpl'
359                                                )
360                                        );
361                                        $p->set_block('mobilemail_t', 'mail_row');
362
363                                        if (is_numeric($index))
364                                        {
365                                                !empty($msg['from']['name']) ? $from = $msg['from']['name'] : $from = $msg['from']['email'];
366                                                !empty($msg['subject']) ? $subject = $msg['subject'] : $subject = lang('[empty subject]');
367                                                $p->set_var('from', $from);
368                                                $p->set_var('subject', $subject);
369                                                $p->set_var('msg_number', $msg['msg_number']);
370                                                $p->set_var('date', $msg['udate']);
371                                                $p->set_var('msg_folder', $this->folders[$this->current_folder]['folder_id']);
372                                                $p->set_var('from_label', lang('From'));
373                                                $mail_rows .= $p->fp('mobilemail_t', 'mail_row');
374                                        }
375                                }
376
377                                // Imprime a lista de e-mails
378                                $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
379                                $p->set_file(
380                                        Array(
381                                                'mobilemail_t' => 'mobilemail.tpl'
382                                        )
383                                );
384                                $p->set_block('mobilemail_t', 'mail_list');
385                                $p->set_var('mail_rows', $mail_rows);
386                                $p->pfp('out', 'mail_list');
387                        }
388                        else
389                        {
390                                // Lista de e-mails vazia
391                                $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
392                                $p->set_file(
393                                        Array(
394                                                'mobilemail_t' => 'mobilemail.tpl'
395                                        )
396                                );
397                                $p->set_block('mobilemail_t', 'empty_list');
398                                $p->set_var('empty_message', lang('No messages in the mailbox'));
399                                $p->pfp('out', 'empty_list');
400                        }
401                }
402
403                /*
404                 * @funtion print_page_navigation
405                 * @abstract Imprime a barra de navegação da lista de e-mails da pasta corrente. Quem chama essa função é quem faz o controle do modelo.
406                 * @author Mário César Kolling <mario.kolling@serpro.gov.br>
407                 * @param integer Número de páginas que serão geradas
408                 * @param integer Página corrente
409                 */
410                // TODO: mover este método para a classe page_navigation subclasse de widget
411                function print_page_navigation($number_of_pages, $page = 1)
412                {
413
414                        $pages = '';
415
416                        if ($number_of_pages != 0)
417                        {
418                                // Geração das páginas
419                                for ($i = 1; $i <= $number_of_pages ; $i++)
420                                {
421
422                                        $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
423                                        $p->set_file(
424                                                Array(
425                                                        'mobilemail_t' => 'mobilemail.tpl'
426                                                )
427                                        );
428
429                                        $p->set_block('mobilemail_t', 'space');
430                                        $p->set_block('mobilemail_t', 'begin_anchor');
431                                        $p->set_block('mobilemail_t', 'end_anchor');
432                                        $p->set_block('mobilemail_t', 'page_item');
433                                        $p->set_block('mobilemail_t', 'begin_strong');
434                                        $p->set_block('mobilemail_t', 'end_strong');
435
436                                        if ($i == $page)
437                                        {
438                                                // Se for a página sendo gerada for a página corrente,
439                                                // não gera a âncora e destaca o número (negrito)
440                                                $p->set_var('end_anchor', '');
441                                                $p->set_var('begin_anchor', '');
442                                                $p->set_var('begin_strong', trim($p->fp('mobilemail_t', 'begin_strong')));
443                                                $p->set_var('end_strong', trim($p->fp('mobilemail_t', 'end_strong')));
444                                        }
445                                        else
446                                        {
447                                                // Senão, gera a âncora
448                                                $p->set_var('begin_strong', '');
449                                                $p->set_var('end_strong', '');
450                                                $p->set_var('end_anchor', trim($p->fp('mobilemail_t', 'end_anchor')));
451                                                $p->set_var('begin_anchor_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$i");
452                                                $p->set_var('begin_anchor', trim($p->fp('mobilemail_t', 'begin_anchor')));
453                                        }
454
455                                        $p->set_var('page', $i);
456                                        //$pages .= trim($p->fp('mobilemail_t', 'page_item'));
457
458                                }
459                                //Apresenta numero da pagina e o total de paginas
460                                $pages .= " ".$page." ".lang("of")." ".$number_of_pages." ";
461
462                                // Geração dos links "anterior" e "próximo"
463                                $p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
464                                $p->set_file(
465                                        Array(
466                                                'mobilemail_t' => 'mobilemail.tpl'
467                                        )
468                                );
469
470                                //$p->set_block('mobilemail_t', 'space');
471                                $p->set_block('mobilemail_t', 'mail_footer');
472                                $p->set_block('mobilemail_t', 'previous');
473                                $p->set_block('mobilemail_t', 'next');
474
475                                $next_page = $page + 1;
476                                $previous_page = $page - 1;
477
478                                if ($page == 1)
479                                {
480                                        // Se for a primeira página, não imprime o link "anterior""
481                                        $p->set_var('previous', '');
482                                        if ($page == $number_of_pages)
483                                        {
484                                                // Se só existir uma página, não imprime o link "próximo"
485                                                $p->set_var('next', '');
486                                        }
487                                        else
488                                        {
489                                                $p->set_var('next_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$next_page");
490                                                $p->set_var('next', trim($p->fp('mobilemail_t', 'next')));
491                                        }
492
493                                }
494                                else if ($page == $number_of_pages)
495                                {
496                                        // Se for a última página, não imprime o link "próximo"
497                                        $p->set_var('next', '');
498                                        $p->set_var('previous_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$previous_page");
499                                        $p->set_var('previous', trim($p->fp('mobilemail_t', 'previous')));
500                                }
501                                else
502                                {
503                                        // Senão, imprime os links "anterior" e "próximo"
504                                        $p->set_var('previous_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$previous_page");
505                                        $p->set_var('previous', trim($p->fp('mobilemail_t', 'previous')));
506
507                                        $p->set_var('next_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$next_page");
508                                        $p->set_var('next', trim($p->fp('mobilemail_t', 'next')));
509                                }
510
511                                $p->set_var('pages', $pages);
512                                $p->pfp('out', 'mail_footer');
513                        }
514
515                }
516
517        }
518?>
Note: See TracBrowser for help on using the repository browser.