'; // Tags html que não serão removidas
// ao mostrar corpo do e-mail
/*
* @function mobilemail
* @abstract Método construtor da classe principal do Mini Mail
* @author Mário César Kolling
*/
function mobilemail()
{
// Recupera atributos da classe gravados na sessão
$folders = $GLOBALS['phpgw']->session->appsession('mobilemail.folders','mobile');
$current_folder = $GLOBALS['phpgw']->session->appsession('mobilemail.current_folder','mobile');
$current_page = $GLOBALS['phpgw']->session->appsession('mobilemail.current_page','mobile');
// Inicializa a classe class.imap_functions.inc.php
$this->imap_functions = new imap_functions();
// Testa a existência dos atributos da classe recuperadas da sessão, e as carrega ou inicializa.
if ($folders)
{
$this->folders = $folders;
}
else
{
$this->folders = $this->imap_functions->get_folders_list();
}
if ($current_folder)
{
$this->current_folder = $current_folder;
}
else
{
$this->current_folder = 0; // Define o folder INBOX como o folder corrente
}
if ($current_page)
{
$this->current_page = $current_page;
}
else
{
$this->current_page = 1; // Define a primeira página como página padrão
}
}
/*
* @function save_session
* @abstract Salva os atributos da classe na sessão
* @author Mário César Kolling
*/
function save_session()
{
$GLOBALS['phpgw']->session->appsession('mobilemail.folders','mobile',$this->folders);
$GLOBALS['phpgw']->session->appsession('mobilemail.current_folder','mobile',$this->current_folder);
$GLOBALS['phpgw']->session->appsession('mobilemail.current_page','mobile',$this->current_page);
}
/*
* @function change_page
* @abstract Troca a página de exibição da lista de e-mails, e mostra a nova página
* @author Mário César Kolling
*/
function change_page()
{
if (isset($_GET['page']))
{
$this->current_page = $_GET['page'];
}
$this->mail_list();
$this->save_session();
}
/*
* @function change_folder
* @abstract Troca a pasta do imap, e mostra a primeira página da nova pasta
* @author Mário César Kolling
*/
function change_folder()
{
$folder = $_GET['folder'];
if (isset($folder))
{
$this->current_folder = $folder;
$this->current_page = 1;
}
$this->mail_list();
$this->save_session();
}
/*
* @function show_msg
* @abstract Mostra a mensagem de e-mail requisitada
* @author Mário César Kolling
*/
// TODO: retirar msg_folder dos parâmentros necessários no GET e usar $this->current_folder
function show_msg()
{
$params = array();
//TODO: testar chamar sem parâmetros para determinar se ocorre algum problema
if (isset($_GET['msg_number']) && isset($_GET['msg_folder']))
{
$params = array(
'msg_number' => $_GET['msg_number'],
'msg_folder' => $_GET['msg_folder'],
);
}
$msg = $this->imap_functions->get_info_msg($params);
// Carrega o template
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'view_msg_t' => 'view_msg.tpl'
)
);
$p->set_block('view_msg_t', 'mail_header');
$p->set_block('view_msg_t', 'mail_body');
$p->set_block('view_msg_t', 'mail_footer');
$p->set_block('view_msg_t', 'attachment_list');
$p->set_block('view_msg_t', 'begin_anchor');
$p->set_block('view_msg_t', 'end_anchor');
// Define o cabeçalho do e-mail
$p->set_var('from_label', lang("From"));
$p->set_var('from', $msg['from']['full']);
$p->set_var('to_label', lang("To"));
$p->set_var('to', $msg['toaddress2']);
$p->set_var('subject_label', lang("Subject"));
$p->set_var('subject', $msg['subject']);
$p->set_var('date_label', lang("Date"));
$p->set_var('date', $msg['fulldate']);
// Mostra o corpo do e-mail
$p->set_var('body', strip_tags($msg['body'], $this->allowed_tags)); // Usa a função strip_tags() para filtrar
// as tags que estão presentes no corpo do e-mail.
$p->set_var('link_text', lang("Return"));
$p->set_var('link', "index.php?menuaction=mobile.mobilemail.mail_list");
if (!empty($msg['attachments']) && !empty($msg['attachments']['names']))
{
$p->set_var('attachment_message', lang('This message have attachment(s)'));
}
else
{
$p->set_var('attachment_message', lang('This message don\'t have attachment(s)'));
}
$p->parse('view_msg_t', 'end_anchor');
$p->parse('view_msg_t', 'begin_anchor');
//$p->pfp('view_msg_t', 'mail_header');
$p->pfp('out', 'mail_header');
//$p->pfp('view_msg_t', 'mail_body');
$p->pfp('out', 'mail_body');
//$p->pfp('view_msg_t', 'attachment_list');
$p->pfp('out', 'attachment_list');
//$p->pfp('view_msg_t', 'mail_footer');
$p->pfp('out', 'mail_footer');
}
/*
* @function index
* @abstract Página inicial da aplicação mobilemail, mantém o estado atual. Ou seja, mostra lista de e-mails
* do folder e página definidos pelos parâmetros current_folder e current_page.
* @author Mário César Kolling
*/
// TODO: Talvez seja melhor voltar sempre para o Inbox e primeira página
function index()
{
$this->print_folder_selection();
$this->mail_list();
$this->save_session();
}
/*
* @function print_folder_selection
* @abstract Imprime o folder corrente (INBOX)
* @author Mário César Kolling
*/
function print_folder_selection()
{
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'inbox_folder_list');
$p->set_var('lang_folder', lang('Folder'));
$p->set_var('lang_inbox', lang('Inbox'));
//$p->set_var('folder_items', $folder_items);
$p->parse('mobilemail_t', 'inbox_folder_list');
$p->pfp('out', 'mobilemail_t');
}
/*
* @function old_print_folder_selection
* @abstract Imprime na tela a caixa de seleção de folders
* @author Mário César Kolling
*/
function old_print_folder_selection()
{
// Processa as options
$folder_items = '';
foreach ($this->folders as $i => $j)
{
$option_selected = '';
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'folder_item');
if (is_numeric($i))
{
if ($i == $this->current_folder)
{
$option_selected = 'selected="selected"';
}
$p->set_var('option_selected', $option_selected);
$p->set_var('folder_id', $j['folder_id']);
$p->set_var('folder_name', $j['folder_id']); // Mudar... provavelmente usar preg_replace
// para substituir cpf pelo nome do usuário.
if ($j['folder_unseen'] > 0)
{
$p->set_var('folder_unseen', ' - ('.$j['folder_unseen'].')');
}
$folder_items .= $p->fp('mobile_t', 'folder_item');
}
}
// Processa o select
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'folder_list');
$p->set_var('folder_items', $folder_items);
$p->parse('mobilemail_t', 'folder_list');
$p->pfp('out', 'mobilemail_t');
}
/*
* @function mail_list
* @abstract Imprime a lista de e-mails
* @author Mário César Kolling
*/
function mail_list()
{
$this->messages_per_page = 10; //TODO: Pegar esse valor de preferences
// var $pages;
// var $actual_page;
// var $number_of_messages;
if (!isset($this->number_of_messages))
{
$params = array(
'folder' => $this->folders[$this->current_folder]['folder_id'],
);
$this->number_of_messages = $this->imap_functions->get_num_msgs($params);
}
// Recalcular as páginas
$this->pages = ceil($this->number_of_messages/$this->messages_per_page);
$page = $this->current_page;
$params = array(
'folder' => $this->folders[$this->current_folder]['folder_id'],
'msg_range_begin' => $this->current_page * 10 - 9,
'msg_range_end' => $this->current_page * 10,
'sort_box_type' => 'SORTARRIVAL',
'sort_box_reverse' => 1
);
$messages = $this->imap_functions->get_range_msgs2($params);
$this->print_mails_list($messages);
$this->print_page_navigation($this->pages, $this->current_page);
}
/*
* @function print_mails_list
* @abstract Imprime a lista de mensagens
* @author Mário César Kolling
* @param array Um array com a lista de mensagens recuperado por $this->imap_functions->get_range_msgs2($params)
*/
function print_mails_list($messages)
{
// Cria a lista de e-mails
$mail_rows = '';
if ($this->number_of_messages != 0)
{
foreach ($messages as $index => $msg)
{
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'mail_row');
if (is_numeric($index))
{
!empty($msg['from']['name']) ? $from = $msg['from']['name'] : $from = $msg['from']['email'];
!empty($msg['subject']) ? $subject = $msg['subject'] : $subject = lang('[empty subject]');
$p->set_var('from', $from);
$p->set_var('subject', $subject);
$p->set_var('msg_number', $msg['msg_number']);
$p->set_var('msg_folder', $this->folders[$this->current_folder]['folder_id']);
$p->set_var('from_label', lang('From'));
$mail_rows .= $p->fp('mobilemail_t', 'mail_row');
}
}
// Imprime a lista de e-mails
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'mail_list');
$p->set_var('mail_rows', $mail_rows);
$p->pfp('out', 'mail_list');
}
else
{
// Lista de e-mails vazia
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'empty_list');
$p->set_var('empty_message', lang('No messages in the mailbox'));
$p->pfp('out', 'empty_list');
}
}
/*
* @funtion print_page_navigation
* @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.
* @author Mário César Kolling
* @param integer Número de páginas que serão geradas
* @param integer Página corrente
*/
// TODO: mover este método para a classe page_navigation subclasse de widget
function print_page_navigation($number_of_pages, $page = 1)
{
$pages = '';
if ($number_of_pages != 0)
{
// Geração das páginas
for ($i = 1; $i <= $number_of_pages ; $i++)
{
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'space');
$p->set_block('mobilemail_t', 'begin_anchor');
$p->set_block('mobilemail_t', 'end_anchor');
$p->set_block('mobilemail_t', 'page_item');
$p->set_block('mobilemail_t', 'begin_strong');
$p->set_block('mobilemail_t', 'end_strong');
if ($i == $page)
{
// Se for a página sendo gerada for a página corrente,
// não gera a âncora e destaca o número (negrito)
$p->set_var('end_anchor', '');
$p->set_var('begin_anchor', '');
$p->set_var('begin_strong', trim($p->fp('mobilemail_t', 'begin_strong')));
$p->set_var('end_strong', trim($p->fp('mobilemail_t', 'end_strong')));
}
else
{
// Senão, gera a âncora
$p->set_var('begin_strong', '');
$p->set_var('end_strong', '');
$p->set_var('end_anchor', trim($p->fp('mobilemail_t', 'end_anchor')));
$p->set_var('begin_anchor_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$i");
$p->set_var('begin_anchor', trim($p->fp('mobilemail_t', 'begin_anchor')));
}
$p->set_var('page', $i);
$pages .= trim($p->fp('mobilemail_t', 'page_item'));
}
// Geração dos links "anterior" e "próximo"
$p = CreateObject('phpgwapi.Template', PHPGW_SERVER_ROOT . '/mobile/templates/'.$GLOBALS['phpgw_info']['server']['template_set']);
$p->set_file(
Array(
'mobilemail_t' => 'mobilemail.tpl'
)
);
$p->set_block('mobilemail_t', 'space');
$p->set_block('mobilemail_t', 'mail_footer');
$p->set_block('mobilemail_t', 'previous');
$p->set_block('mobilemail_t', 'next');
$next_page = $page + 1;
$previous_page = $page - 1;
if ($page == 1)
{
// Se for a primeira página, não imprime o link "anterior""
$p->set_var('previous', '');
if ($page == $number_of_pages)
{
// Se só existir uma página, não imprime o link "próximo"
$p->set_var('next', '');
}
else
{
$p->set_var('next_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$next_page");
$p->set_var('next', trim($p->fp('mobilemail_t', 'next')));
}
}
else if ($page == $number_of_pages)
{
// Se for a última página, não imprime o link "próximo"
$p->set_var('next', '');
$p->set_var('previous_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$previous_page");
$p->set_var('previous', trim($p->fp('mobilemail_t', 'previous')));
}
else
{
// Senão, imprime os links "anterior" e "próximo"
$p->set_var('previous_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$previous_page");
$p->set_var('previous', trim($p->fp('mobilemail_t', 'previous')));
$p->set_var('next_href', "index.php?menuaction=mobile.mobilemail.change_page&page=$next_page");
$p->set_var('next', trim($p->fp('mobilemail_t', 'next')));
}
$p->set_var('pages', $pages);
$p->pfp('out', 'mail_footer');
}
}
}
?>