hello all

i want to share some modifications i made to roundcube code in order to get quota work .. i made this because i manage a computer with apache (only) and other with smtp and imap (only) and i want the user may be able to see his/her quota

i saw in the code (thanks to Roland Liebl for show me the file) that quota are retrieved via imap .. i don't have quotas via imap but in filesystem and my scenario is a little complex .. well, this changes modify some configuration variables and part of the code to process the quota


[config/main.inc.php]

$rcmail_config['quota'] = array(
             'backend' => 'cmd',
             'program' => '/usr/bin/ssh -i /usr/local/www/apache22/data/sitios/roundcubemail031/config/ssh_reporte reporte@madara.ipigto.rimed.cu /usr/bin/quota',
  'program_parameters' => '-f /srv -v',
   'zero_as_unlimited' => TRUE);


[program/steps/mail/func.inc]

function rcmail_quota_content($quota=NULL, $attrib=NULL)
  {
  global $CONFIG, $IMAP, $COMM_PATH, $RCMAIL;

  $display = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : '';

  $quota = array(
                 'total' => 0,
                 'used' => 0,
                 'percent' => 0,
                );

  switch ($CONFIG['quota']['backend']) {
    case 'imap':
      if (empty($quota)) {
        if (!$IMAP->get_capability('QUOTA'))
          return rcube_label('unknown');
        else
          $quota = $IMAP->get_quota();
      }
      break;
    case 'cmd':
      $user = split("@", $RCMAIL->user->get_username());
      exec($CONFIG['quota']['program'] ." ". $CONFIG['quota']['program_parameters'] ." ". $user[0], $result);
      list($quota_fs, $quota['used'], $quota_sl, $quota['total']) = preg_split('/  /', trim($result[2]));
      if (substr($quota['used'], -1) == '*') { $quota['used'] = substr($quota['used'], 0, -1); }
      $quota['percent'] = (($quota['used'] * 100) / $quota['total']);
      break;
    default:
      return rcube_label('unknown');
      break;
  }
  if ($quota && !($quota['total']==0 && $CONFIG['quota']['zero_as_unlimited']))
    {
    $quota_result = sprintf('%s / %s (%.0f%%)',
        show_bytes($quota['used'] * 1024), show_bytes($quota['total'] * 1024),
        $quota['percent']);

    if ($display == 'image') {
      $quota_result = array(
        'percent'       => $quota['percent'],
        'title'         => $quota_result,
        );
      if ($attrib['width'])
        $quota_result['width'] = $attrib['width'];
      if ($attrib['height'])
        $quota_result['height'] = $attrib['height'];
      }
    }
  else
    return rcube_label('unlimited');

  return $quota_result;
}


i want to ask to roundcube developers to adopt this modifications in order to strengthen the quota retrieval system .. the complete configuration may be as follow:

[config/main.inc.php]

// Quota Retrieval System
$rcmail_config['quota'] = array(
             'backend' => 'imap',
   'zero_as_unlimited' => TRUE);

$rcmail_config['quota'] = array(
             'backend' => 'cmd',
             'program' => '/usr/bin/quota',
  'program_parameters' => '-f /filesystem -v',
   'zero_as_unlimited' => TRUE);


well, that's all