예제 #1
0
 function makeAll($params)
 {
     //Exporta menssagens selecionadas na pesquisa
     if ($params['folder'] === 'false') {
         $this->folder = $params['folder'];
         $error = False;
         $fileNames = "";
         $sel_msgs = explode(",", $params['msgs_to_export']);
         @reset($sel_msgs);
         $sorted_msgs = array();
         foreach ($sel_msgs as $idx => $sel_msg) {
             $sel_msg = explode(";", $sel_msg);
             if (array_key_exists($sel_msg[0], $sorted_msgs)) {
                 $sorted_msgs[$sel_msg[0]] .= "," . $sel_msg[1];
             } else {
                 $sorted_msgs[$sel_msg[0]] = $sel_msg[1];
             }
         }
         unset($sorted_msgs['']);
         // Verifica se as n mensagens selecionadas
         // se encontram em um mesmo folder
         if (count($sorted_msgs) == 1) {
             $array_names_keys = array_keys($sorted_msgs);
             $this->folder = mb_convert_encoding($array_names_keys[0], "UTF7-IMAP", "UTF-8, ISO-8859-1, UTF7-IMAP");
             $msg_number = explode(',', $sorted_msgs[$array_names_keys[0]]);
             $tempDir = $this->tempDir;
             $this->connectImap();
             //verifica se apenas uma mensagem foi selecionada e exportar em .eml
             if (count($msg_number) == 1) {
                 $header = $this->getHeader($msg_number[0]);
                 $body = $this->getBody($msg_number[0]);
                 $sEMLData = $this->parseEml($header, $body);
                 $fileName = $this->CreateFileEml($sEMLData, $tempDir, $msg_number[0] . "_" . $_SESSION['phpgw_session']['session_id']);
                 $header = imap_headerinfo($this->mbox_stream, imap_msgno($this->mbox_stream, $msg_number[0]), 80, 255);
                 $subject = $this->decode_subject(html_entity_decode($header->fetchsubject));
                 imap_close($this->mbox_stream);
                 if (!$fileName) {
                     return false;
                 } else {
                     $return = array();
                     $return[] = $tempDir . '/' . $fileName;
                     $return[] = $subject;
                     return $return;
                 }
             }
             //cria um .zip com as mensagens selecionadas
             $msg_number_count = count($msg_number);
             for ($i = 0; $i < $msg_number_count; ++$i) {
                 $header = $this->getHeader($msg_number[$i]);
                 $body = $this->getBody($msg_number[$i]);
                 $sEMLData = $this->parseEml($header, $body);
                 $fileName = $this->CreateFileEml($sEMLData, $tempDir, $msg_number[$i]);
                 if (!$fileName) {
                     $error = True;
                     break;
                 } else {
                     $fileNames .= "\"" . $fileName . "\" ";
                 }
             }
             imap_close($this->mbox_stream);
             $nameFileZip = 'False';
             if ($fileNames && !$error) {
                 $nameFileZip = $this->createFileZip($fileNames, $tempDir);
                 if ($nameFileZip) {
                     $file = $tempDir . '/' . $nameFileZip;
                 } else {
                     $file = false;
                 }
             } else {
                 $file = false;
             }
             return $file;
             //exporta mensagens de diferentes pastas
         } else {
             $array_names_keys = array_keys($sorted_msgs);
             $array_names_keys_count = count($array_names_keys);
             for ($i = 0; $i < $array_names_keys_count; ++$i) {
                 $this->folder = mb_convert_encoding($array_names_keys[$i], "UTF7-IMAP", "UTF-8, ISO-8859-1, UTF7-IMAP");
                 $msg_number = explode(',', $sorted_msgs[$array_names_keys[$i]]);
                 $tempDir = $this->tempDir;
                 $this->connectImap();
                 $msg_number_count = count($msg_number);
                 for ($j = 0; $j < $msg_number_count; ++$j) {
                     $header = $this->getHeader($msg_number[$j]);
                     $body = $this->getBody($msg_number[$j]);
                     $sEMLData = $this->parseEml($header, $body);
                     $fileName = $this->CreateFileEml($sEMLData, $tempDir, $msg_number[$j]);
                     if (!$fileName) {
                         $error = True;
                         break;
                     } else {
                         $fileNames .= "\"" . $fileName . "\" ";
                     }
                 }
                 imap_close($this->mbox_stream);
             }
             $nameFileZip = 'False';
             if ($fileNames && !$error) {
                 $nameFileZip = $this->createFileZip($fileNames, $tempDir);
                 if ($nameFileZip) {
                     $file = $tempDir . '/' . $nameFileZip;
                 } else {
                     $file = false;
                 }
             } else {
                 $file = false;
             }
             return $file;
         }
     } else {
         // Exportacao de mensagens arquivadas localmente
         if ($params['l_msg'] == "t") {
             // Recebe todos os subjects e bodies das mensagens locais selecionadas para exportacao
             // e gera arrays com os conteudos separados;
             $array_mesgs = explode('@@', $params['mesgs']);
             $array_subjects = explode('@@', $params['subjects']);
             $array_ids = explode(',', $params['msgs_to_export']);
             $tempDir = $this->tempDir;
             include_once "class.imap_functions.inc.php";
             $imapf = new imap_functions();
             // quando houver apenas um arquivo, exporta o .eml sem coloca-lo em zip
             if (count($array_ids) == 1) {
                 $sEMLData = $imapf->treat_base64_from_post($array_mesgs[0]);
                 $fileName = $this->CreateFileEml($sEMLData, $tempDir, '', $array_subjects[0], "offline");
                 return $tempDir . '/' . $fileName;
             }
             // Para cada mensagem selecionada sera gerado um arquivo .eml cujo titulo sera o assunto (subject) da mesma;
             foreach ($array_ids as $i => $id) {
                 $sEMLData = $imapf->treat_base64_from_post($array_mesgs[$i]);
                 $fileName = $this->CreateFileEml($sEMLData, $tempDir, '', $array_subjects[$i], $i);
                 if (!$fileName) {
                     $error = True;
                     break;
                 } else {
                     $fileNames .= "\"" . $fileName . "\" ";
                 }
             }
             $nameFileZip = 'False';
             if ($fileNames && !$error) {
                 $nameFileZip = $this->createFileZip($fileNames, $tempDir);
                 if ($nameFileZip) {
                     $file = $tempDir . '/' . $nameFileZip;
                 } else {
                     $file = false;
                 }
             } else {
                 $file = false;
             }
             return $file;
         } else {
             $this->folder = $params['folder'];
             $this->folder = mb_convert_encoding($this->folder, "UTF7-IMAP", "UTF-8, ISO-8859-1, UTF7-IMAP");
             $array_ids = explode(',', $params['msgs_to_export']);
             $error = False;
             $fileNames = "";
             $tempDir = $this->tempDir;
             $this->connectImap();
             // quando houver apenas um arquivo, exporta o .eml sem coloca-lo em zip
             if (count($array_ids) == 1) {
                 $header = $this->getHeader($array_ids[0]);
                 $body = $this->getBody($array_ids[0]);
                 $sEMLData = $this->parseEml($header, $body);
                 $fileName = $this->CreateFileEml($sEMLData, $tempDir, $array_ids[0] . "_" . $_SESSION['phpgw_session']['session_id']);
                 $header = imap_headerinfo($this->mbox_stream, imap_msgno($this->mbox_stream, $array_ids[0]), 80, 255);
                 $subject = $this->decode_subject(html_entity_decode($header->fetchsubject));
                 imap_close($this->mbox_stream);
                 if (!$fileName) {
                     return false;
                 } else {
                     $return = array();
                     $return[] = $tempDir . '/' . $fileName;
                     $return[] = $subject;
                     return $return;
                 }
             }
             $array_ids_count = count($array_ids);
             for ($i = 0; $i < $array_ids_count; ++$i) {
                 $header = $this->getHeader($array_ids[$i]);
                 $body = $this->getBody($array_ids[$i]);
                 $sEMLData = $this->parseEml($header, $body);
                 $fileName = $this->CreateFileEml($sEMLData, $tempDir, $array_ids[$i]);
                 if (!$fileName) {
                     $error = True;
                     break;
                 } else {
                     $fileNames .= "\"" . $fileName . "\" ";
                 }
             }
             imap_close($this->mbox_stream);
             $nameFileZip = 'False';
             if ($fileNames && !$error) {
                 $nameFileZip = $this->createFileZip($fileNames, $tempDir);
                 if ($nameFileZip) {
                     $file = $tempDir . '/' . $nameFileZip;
                     $ret[] = $file;
                     return $ret;
                 } else {
                     $file = false;
                 }
             } else {
                 $file = false;
             }
             return $file;
         }
     }
 }
예제 #2
0
 public function deepnessFollowupflaggeds(&$uri, &$result, &$criteria, $original)
 {
     if (isset($original['criteria']['deepness'])) {
         foreach ($result as $i => $v) {
             if (isset($v['followupflagId'])) {
                 $followupflags = Controller::find(array('concept' => 'followupflag'), false, array('filter' => array('=', 'id', $v['followupflagId'])));
                 /**
                  * Devido a inconsistencias na chamada do interceptor addDefaultElementsFilter (followupflag:before.find)
                  * os followupflag defaults são inseridos no retorno, por isso é necessário procurar o objeto correto
                  * através do id
                  */
                 foreach ($followupflags as $followupflag) {
                     if ($v['followupflagId'] == $followupflag['id']) {
                         $result[$i]['followupflag'] = $followupflag;
                         break;
                     }
                 }
             }
             if (isset($v['messageNumber']) && isset($v['folderName'])) {
                 $details = $original['criteria']['deepness'] == '1' ? 'headers' : 'all';
                 $imapService = new imap_functions();
                 $message = $imapService->getMessages(array('messages' => array($v['folderName'] => array($v['messageNumber'])), 'details' => $details));
                 $result[$i]['message'] = $message[$v['folderName']][0];
             }
         }
     }
     return $result;
 }