alecpl
2009-01-07 46b48e6d349d48e6e211858a82589223b1364518
program/lib/imap.inc
@@ -75,6 +75,7 @@
      - optimize iil_C_FetchHeaders() to use only one FETCH command
      - added 4th argument to iil_Connect()
      - allow setting rootdir and delimiter before connect
      - support multiquota result
********************************************************/
@@ -542,7 +543,7 @@
   }
   if (empty($auth_method))
          $auth_method = 'plain';
          $auth_method = 'check';
      
   $message = "INITIAL: $auth_method\n";
      
@@ -1742,7 +1743,7 @@
               //get timezone
               $time_str      = substr($time_str, 0, -1);
               $time_zone_str = substr($time_str, -5); // extract timezone
               $time_str      = substr($time_str, 1, -6); // remove quotes
               $time_str      = substr($time_str, 0, -5); // remove timezone
               $time_zone     = (float)substr($time_zone_str, 1, 2); // get first two digits
         
               if ($time_zone_str[3] != '0') {
@@ -1755,7 +1756,7 @@
               //calculate timestamp
                                        $timestamp     = strtotime($time_str); //return's server's time
               $timestamp    -= $time_zone * 3600; //compensate for tz, get GMT
               $result[$id]->internaldate = $time_str;
               $result[$id]->timestamp = $timestamp;
               $result[$id]->date = $time_str;
@@ -2656,31 +2657,41 @@
 * GETQUOTAROOT "INBOX"
 * QUOTAROOT INBOX user/rchijiiwa1
 * QUOTA user/rchijiiwa1 (STORAGE 654 9765)
 b OK Completed
 * OK Completed
 */
   $fp         = $conn->fp;
   $result     = false;
   $quota_line = '';
   $quota_lines = array();
   
   //get line containing quota info
   // get line(s) containing quota info
   if (iil_PutLine($fp, 'QUOT1 GETQUOTAROOT "INBOX"')) {
      do {
         $line=chop(iil_ReadLine($fp, 5000));
         if (iil_StartsWith($line, '* QUOTA ')) {
            $quota_line = $line;
            $quota_lines[] = $line;
              }
      } while (!iil_StartsWith($line, 'QUOT1', true));
   }
   
   //return false if not found, parse if found
   if (!empty($quota_line)) {
   // return false if not found, parse if found
   $min_free = PHP_INT_MAX;
   foreach ($quota_lines as $key => $quota_line) {
      $quota_line   = eregi_replace('[()]', '', $quota_line);
      $parts        = explode(' ', $quota_line);
      $storage_part = array_search('STORAGE', $parts);
      if ($storage_part > 0) {
         $result['used']    = intval($parts[$storage_part+1]);
         $result['total']   = intval($parts[$storage_part+2]);
         $result['percent'] = min(100, round(($result['used']/max(1,$result['total']))*100));
      if (!$storage_part) continue;
      $used   = intval($parts[$storage_part+1]);
      $total   = intval($parts[$storage_part+2]);
      $free   = $total - $used;
      // return lowest available space from all quotas
      if ($free < $min_free) {
              $min_free = $free;
         $result['used']    = $used;
         $result['total']   = $total;
         $result['percent'] = min(100, round(($used/max(1,$total))*100));
         $result['free']    = 100 - $result['percent'];
      }
   }