- Timestamp:
- 11/29/11 13:34:40 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoMail1_2/inc/class.imap_functions.inc.php
r5212 r5216 2329 2329 return $contentType; 2330 2330 } 2331 2332 /** 2333 * Metodo que retorna todas as pastas do usuario logado. 2334 * @param $params array opcional para repassar os argumentos ao metodo. 2335 * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuário logado, 2336 * excluindo as compartilhadas para ele. 2337 * Se usar $params['folderType'] = "default" irá retornar somente as pastas defaults 2338 * Se usar $params['folderType'] = "personal" irá retornar somente as pastas pessoais 2339 * Se usar $params['folderType'] = null irá retornar todas as pastas 2340 * @return Retorna um array contendo as seguintes informacoes de cada pasta: folder_unseen, 2341 * folder_id, folder_name, folder_parent e folder_hasChildren. 2342 */ 2331 2332 function getFolderPos(&$array , $find) 2333 { 2334 foreach($array as $i => $v) 2335 if($v['id'] === $find) 2336 return $i; 2337 return false; 2338 } 2339 2340 /** 2341 * Ordenas as pastas padrões do usuario na ordem INBOX > SENT > DRAFTS > SPAM > TRASH > OTHERS 2342 * 2343 * @license http://www.gnu.org/copyleft/gpl.html GPL 2344 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 2345 * @sponsor Caixa Econômica Federal 2346 * @author Cristiano Corrêa Schmidt 2347 * @access public 2348 */ 2349 function orderDefaultFolders( &$folders , $user) 2350 { 2351 $principals = array(); 2352 for($x = 0; $x < 5 ; $x++) 2353 { 2354 switch ($x) { 2355 case 0: 2356 if( ($p = $this->getFolderPos($folders , $user )) || $p === 0 ) 2357 $principals[] = $folders[$p]; 2358 break; 2359 case 1: 2360 if( ($p = $this->getFolderPos($folders , $user . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder'] )) || $p === 0 ) 2361 $principals[] = $folders[$p]; 2362 break; 2363 case 2: 2364 if( ($p = $this->getFolderPos($folders , $user . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder'] )) || $p === 0 ) 2365 $principals[] = $folders[$p]; 2366 break; 2367 case 3: 2368 if( ($p = $this->getFolderPos($folders , $user . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder'] )) || $p === 0 ) 2369 $principals[] = $folders[$p]; 2370 break; 2371 case 4: 2372 if( ($p = $this->getFolderPos($folders , $user . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder'] )) || $p === 0 ) 2373 $principals[] = $folders[$p]; 2374 break; 2375 } 2376 if($p !== false) 2377 unset($folders[$p]); 2378 } 2379 $folders = array_merge($principals, $folders); 2380 } 2381 2382 /** 2383 * Retorna lista de pastas do usuario no padrão que a lib javascript espera. 2384 * 2385 * @license http://www.gnu.org/copyleft/gpl.html GPL 2386 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 2387 * @sponsor Caixa Econômica Federal 2388 * @author Cristiano Corrêa Schmidt 2389 * @access public 2390 */ 2343 2391 function get_folders_list($params = null) 2344 2392 { 2345 $mbox_stream = $this->open_mbox(); 2346 if($params && array_key_exists('onload', $params) && $params['onload'] && $_SESSION['phpgw_info']['expressomail']['server']['certificado']){ 2347 $this->delete_mailbox(array("del_past" => "INBOX".$this->imap_delimiter."decifradas")); 2348 } 2349 2350 $inbox = 'INBOX'; 2351 $drafts = $inbox . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']; 2352 $sent = $inbox . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']; 2353 $spam = $inbox . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']; 2354 $trash = $inbox . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']; 2355 2356 if(array_key_exists('uid2cn', $_SESSION['phpgw_info']['user']['preferences']['expressoMail'] )) 2357 $uid2cn = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['uid2cn']; 2393 ///Define Variaveis 2394 $prefixShared = 'user'; //Prefixo das pastas compartilhadas 2395 $uid2cn = (isset($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['uid2cn'])) ? $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['uid2cn'] : false; 2396 $mboxStream = $this->open_mbox(); //abre conexão imap 2397 $currentFolder = isset($params['folder']) ? $params['folder'] : 'INBOX'; 2398 $folders = array(); 2399 $return = array(); 2400 /////////////////////////////////////////////////////////////// 2401 2402 if( isset($params['onload']) && $_SESSION['phpgw_info']['expressomail']['server']['certificado']) 2403 $this->delete_mailbox(array('del_past' => 'INBOX'.$this->imap_delimiter.'decifradas')); //Deleta Pasta decifradas 2404 2405 session_write_close(); // Free others requests 2406 $serverString = "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}"; 2407 2408 if ( isset($params['noSharedFolders']) ) 2409 $folders_list = array_merge(imap_getmailboxes($mboxStream, $serverString, 'INBOX' ), imap_getmailboxes($mboxStream, $serverString, 'INBOX/*' ) ); 2358 2410 else 2359 $uid2cn = false; 2360 // Free others requests 2361 session_write_close(); 2362 2363 $serverString = "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}"; 2364 2365 if ( $params && isset($params['noSharedFolders']) ) 2366 $folders_list = array_merge(imap_getmailboxes($mbox_stream, $serverString, 'INBOX' ), imap_getmailboxes($mbox_stream, $serverString, 'INBOX/*' ) ); 2367 else 2368 $folders_list = imap_getmailboxes($mbox_stream, $serverString, '*' ); 2411 $folders_list = imap_getmailboxes($mboxStream, $serverString, '*' ); 2369 2412 2370 2413 $folders_list = array_slice($folders_list,0,$this->foldersLimit); 2371 2414 2372 $tmp = array(); 2373 $resultMine = array(); 2374 $resultSharedMine = array(); 2375 $resultDefault = array(); 2376 $resultSharedDefault = array(); 2377 $aux = ""; 2378 $qtd = -1 ; 2379 2380 if (is_array($folders_list)) { 2381 reset($folders_list); 2382 $this->ldap = new ldap_functions(); 2383 2384 $i = 0; 2385 while (list($key, $val) = each($folders_list)) { 2386 $status = imap_status($mbox_stream, $val->name, SA_UNSEEN); 2387 2388 //$tmp_folder_id = explode("}", imap_utf7_decode($val->name)); 2389 $tmp_folder_id = explode("}", $val->name ); 2390 2391 $folderUser = trim( strpos( $tmp_folder_id[1], $this->imap_delimiter , 5 ) ); 2392 2393 $folderUser = trim( substr( $tmp_folder_id[1], 0, $folderUser ) ); 2394 2395 $Permission = true; 2396 2397 if( $folderUser != "INBOX" && $folderUser != "" ) 2398 { 2399 $Permission = @imap_getacl( $mbox_stream, $folderUser ); 2400 } 2401 $tmp_folder_id[1] = mb_convert_encoding( $tmp_folder_id[1], "ISO-8859-1", "UTF7-IMAP" ); 2402 2403 if( $tmp_folder_id[1]=='INBOX'.$this->imap_delimiter.'decifradas') 2404 { 2405 continue; 2406 } 2407 2408 if(isset($status->unseen)) 2409 $result[$i]['folder_unseen'] = $status->unseen; 2410 2411 $folder_id = $tmp_folder_id[1]; 2412 $result[$i]['folder_id'] = $folder_id; 2413 2414 $tmp_folder_parent = explode($this->imap_delimiter, $folder_id); 2415 $result[$i]['folder_name'] = array_pop($tmp_folder_parent); 2416 $result[$i]['folder_name'] = $result[$i]['folder_name'] == 'INBOX' ? 'Inbox' : $result[$i]['folder_name']; 2415 if (!is_array($folders_list)) return false; 2416 if($uid2cn) 2417 $this->ldap = new ldap_functions(); 2418 2419 foreach ($folders_list as $i => $v ) //Separando Pastas e informações 2420 { 2421 $folderId = substr($v->name,(strpos($v->name , '}') + 1)); 2422 $nameArray = explode($this->imap_delimiter, $folderId); 2423 $nameCount = count($nameArray); 2424 $decifrada = mb_convert_encoding('INBOX'.$this->imap_delimiter.'decifradas','UTF7-IMAP','ISO-8859-1'); //Ignorar esta pasta decifrada 2425 $parent = ($nameCount > 1 && $nameArray[($nameCount - 2)] !== 'INBOX') ? implode($this->imap_delimiter, array_slice($nameArray, 0, ($nameCount - 1))): ''; //Pega folder pai 2426 if($nameArray[0] === 'user') 2427 $folders[$prefixShared.$this->imap_delimiter.$nameArray[1]][] = array('id' => $folderId , 'stream' => $v->name , 'attributes' => $v->attributes , 'name' => $nameArray[($nameCount-1)] , 'user' => $nameArray[1] ,'parent' => $parent); 2428 else if( $folderId !== $decifrada) //Escapa pasta decifrada 2429 $folders['INBOX'][] = array('id' => $folderId , 'stream' => $v->name , 'attributes' => $v->attributes ,'name' => $nameArray[($nameCount-1)] , 'parent' => $parent); 2430 } 2431 unset($folders_list); //destroy array de objetos desnecessarios 2432 foreach($folders as $i => $v) //Ordenando e resgatando novas informações 2433 { 2434 $this->orderDefaultFolders($folders[$i] , $i); //Ordenando Pastas Padrões 2417 2435 2418 if ($uid2cn && substr($folder_id,0,4) == 'user') { 2419 //$this->ldap = new ldap_functions(); 2420 if ($cn = $this->ldap->uid2cn($result[$i]['folder_name'])) { 2421 $result[$i]['folder_name'] = $cn; 2422 } 2423 } 2424 2425 $tmp_folder_parent = implode($this->imap_delimiter, $tmp_folder_parent); 2426 $result[$i]['folder_parent'] = $tmp_folder_parent == 'INBOX' ? '' : $tmp_folder_parent; 2427 2428 if (($val->attributes == 32) && ($result[$i]['folder_name'] != 'Inbox')) 2429 $result[$i]['folder_hasChildren'] = 1; 2430 else 2431 $result[$i]['folder_hasChildren'] = 0; 2432 $user = explode($this->imap_delimiter , $tmp_folder_id[1]); 2433 switch ($tmp_folder_id[1]) { 2434 case $inbox: 2435 case $drafts: 2436 case $sent: 2437 case $spam: 2438 case $trash: 2439 $resultDefault[]=$result[$i]; 2440 break; 2441 case "user". $this->imap_delimiter . $user[1]: 2442 case "user". $this->imap_delimiter . $user[1] . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']: 2443 case "user". $this->imap_delimiter . $user[1] . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']: 2444 case "user". $this->imap_delimiter . $user[1] . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']: 2445 case "user". $this->imap_delimiter . $user[1] . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']: 2446 if($aux != $user[1]){ 2447 $aux = $user[1]; 2448 $qtd += 1; 2449 } 2450 if( isset($resultSharedDefault[$qtd]) && !is_array($resultSharedDefault[$qtd])) 2451 $resultSharedDefault[$qtd] = array(); 2452 $resultSharedDefault[$qtd][]=$result[$i]; 2453 break; 2454 default: 2455 if($user[0] == $inbox) 2456 $resultMine[]=$result[$i]; 2457 else{ 2458 if($aux != $user[1]){ 2459 $aux = $user[1]; 2460 $qtd += 1; 2461 } 2462 if(!is_array($resultSharedDefault[$qtd])) 2463 $resultSharedMine[$qtd] = array(); 2464 $resultSharedMine[$qtd][]=$result[$i]; 2465 } 2466 2467 } 2468 $i++; 2469 } 2470 } 2471 2472 if ( $params && !array_key_exists('noQuotaInfo',$params) ) { 2473 //Get quota info of current folder 2474 $current_folder = "INBOX"; 2475 if($params && isset($params['folder'])) 2476 $current_folder = $params['folder']; 2477 2478 $arr_quota_info = $this->get_quota(array('folder_id' => $current_folder)); 2479 } else { 2480 $arr_quota_info = array(); 2481 } 2482 2483 $result2 = array(); 2484 2485 // Sorting resultMine 2486 if(count($resultMine)){ 2487 foreach ($resultMine as $folder_info) 2436 foreach ($folders[$i] as $ii => $vv) 2488 2437 { 2489 $array_tmp[] = $folder_info['folder_id']; 2490 } 2491 2492 if(is_array($array_tmp)) 2493 { 2494 natcasesort($array_tmp); 2495 2496 foreach ($array_tmp as $key => $folder_id) 2497 { 2498 $result2[] = $resultMine[$key]; 2499 } 2500 } 2501 } 2502 // Sorting resultDefault 2503 $resultDefault2 = array(); 2504 2505 foreach ($resultDefault as $key => $folder_id) 2506 { 2507 2508 switch ($resultDefault[$key]['folder_id']) { 2509 case $inbox: 2510 $resultDefault2[0] = $resultDefault[$key]; 2511 break; 2512 case $drafts: 2513 $resultDefault2[1] = $resultDefault[$key]; 2514 break; 2515 case $sent: 2516 $resultDefault2[2] = $resultDefault[$key]; 2517 break; 2518 case $spam: 2519 $resultDefault2[3] = $resultDefault[$key]; 2520 break; 2521 case $trash: 2522 $resultDefault2[4] = $resultDefault[$key]; 2523 break; 2524 } 2525 } 2526 //RE-ORDENA INDICES 2527 ksort($resultDefault2); 2528 $shareds = array(); 2529 if(!empty($resultSharedDefault)) 2530 for($i = array_shift(array_keys($resultSharedDefault)); $i <= $qtd; $i++){ 2531 foreach ($resultSharedDefault[$i] as $key => $folder_id) 2532 { 2533 $user = explode($this->imap_delimiter , $resultSharedDefault[$i][$key]['folder_id']); 2534 2535 switch ($resultSharedDefault[$i][$key]['folder_id']) { 2536 case "user". $this->imap_delimiter . $user[1]: 2537 $resultSharedDefault2[0] = $resultSharedDefault[$i][$key]; 2538 break; 2539 case "user". $this->imap_delimiter . $user[1]. $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultDraftsFolder']: 2540 $resultSharedDefault2[1] = $resultSharedDefault[$i][$key]; 2541 break; 2542 case "user". $this->imap_delimiter . $user[1]. $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSentFolder']: 2543 $resultSharedDefault2[2] = $resultSharedDefault[$i][$key]; 2544 break; 2545 case "user". $this->imap_delimiter . $user[1]. $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultSpamFolder']: 2546 $resultSharedDefault2[3] = $resultSharedDefault[$i][$key]; 2547 break; 2548 case "user". $this->imap_delimiter . $user[1] . $this->imap_delimiter . $_SESSION['phpgw_info']['expressomail']['email_server']['imapDefaultTrashFolder']: 2549 $resultSharedDefault2[4] = $resultSharedDefault[$i][$key]; 2550 break; 2551 } 2552 } 2553 if($resultDefault2 != null) 2554 $shareds = array_merge($shareds, $resultSharedDefault2); 2555 if(isset($resultSharedMine[$i]) && $resultSharedMine[$i] != null) 2556 $shareds = array_merge($shareds, $resultSharedMine[$i]); 2557 $resultSharedDefault2 = array(); 2558 } 2559 if ( $params && isset($params['folderType']) && $params['folderType'] == 'default' ) 2560 return array_merge($resultDefault2, $arr_quota_info); 2561 2562 if ( $params && array_key_exists('folderType', $params) && $params['folderType'] == 'personal' ) 2563 return array_merge($result2, $arr_quota_info); 2564 2565 // Merge default folders and personal 2566 $result2 = array_merge($resultDefault2, $result2); 2567 if(!empty($shareds)) 2568 $result2 = array_merge($result2, $shareds); 2569 return array_merge($result2, $arr_quota_info); 2570 } 2438 $append = array(); 2439 $append['folder_id'] = mb_convert_encoding($vv['id'],'ISO-8859-1','UTF7-IMAP');//DECODIFICA ID DAS PASTAS COM ACENTOS 2440 $append['folder_name'] = (($uid2cn && isset($vv['user'])) && ($cn = $this->ldap->uid2cn($vv['user']))) ? $cn : $vv['name']; 2441 $append['folder_name'] = mb_convert_encoding($append['folder_name'],'ISO-8859-1','UTF7-IMAP');//DECODIFICA NOME DAS PASTAS COM ACENTOS 2442 $status = imap_status($mboxStream, $vv['stream'], SA_UNSEEN); //Resgata Numero de mensagens não lidas 2443 $append['folder_unseen'] = isset($status->unseen) ? $status->unseen : 0 ; 2444 $append['folder_hasChildren'] = (($vv['attributes'] == 32) && ($vv['name'] != 'INBOX')) ? 1 : 0; 2445 $append['folder_parent'] = $vv['parent']; 2446 $return[] = $append; 2447 } 2448 } 2449 2450 $quotaInfo = (!isset($params['noQuotaInfo'])) ? $this->get_quota( array('folder_id' => $currentFolder)) : false; //VERIFICA SE O USUARIO TEM COTA 2451 2452 return ( ( is_array($quotaInfo) ) ? array_merge($return, $quotaInfo) : $return ); 2453 } 2454 2571 2455 2572 2456 function create_mailbox($arr)
Note: See TracChangeset
for help on using the changeset viewer.