Marius Cramer
2015-08-06 37b29231e47a0c4458dc1c15d98588f16f07e1e2
server/lib/classes/cron.d/100-monitor_email_quota.inc.php
@@ -75,15 +75,28 @@
      //* The state of the email_quota.
      $state = 'ok';
      $mailboxes = $app->db->queryAllRecords("SELECT email,maildir FROM mail_user WHERE server_id = $server_id");
      $mailboxes = $app->db->queryAllRecords("SELECT email,maildir FROM mail_user WHERE server_id = ?", $server_id);
      if(is_array($mailboxes)) {
         //* with dovecot we can use doveadm instead of 'du -s'
         $dovecot = false;
         if (isset($mail_config['pop3_imap_daemon']) && $mail_config ['pop3_imap_daemon'] = 'dovecot' && is_executable('doveadm')) {
            exec('doveadm quota 2>&1', $tmp_output, $tmp_retval); // with dovecot 2.2.x 'doveadm quota' is unuseable
            if ($retval = 64) $dovecot = true;
         }
         foreach($mailboxes as $mb) {
            $email = $mb['email'];
            $email_parts = explode('@', $mb['email']);
            $filename = $mb['maildir'].'/.quotausage';
            if(!file_exists($filename) && $dovecot) {
               exec('doveadm quota recalc -u '.$email);
            }
            if(file_exists($filename) && !is_link($filename)) {
               $quotafile = file($filename);
               $data[$email]['used'] = trim($quotafile['1']);
               preg_match('/storage.*?([0-9]+)/s', implode('',$quotafile), $storage_value);
               $data[$email]['used'] = $storage_value[1];
               $app->log("Mail storage $email: " . $storage_value[1], LOGLEVEL_DEBUG);
               unset($quotafile);
            } else {
               exec('du -s '.escapeshellcmd($mb['maildir']), $out);
@@ -121,14 +134,8 @@
         * Insert the data into the database
         */
      $sql = 'REPLACE INTO monitor_data (server_id, type, created, data, state) ' .
         'VALUES (' .
         $res['server_id'] . ', ' .
         "'" . $app->dbmaster->quote($res['type']) . "', " .
         'UNIX_TIMESTAMP(), ' .
         "'" . $app->dbmaster->quote(serialize($res['data'])) . "', " .
         "'" . $res['state'] . "'" .
         ')';
      $app->dbmaster->query($sql);
         'VALUES (?, ?, UNIX_TIMESTAMP(), ?, ?)';
      $app->dbmaster->query($sql, $res['server_id'], $res['type'], serialize($res['data']), $res['state']);
      /* The new data is written, now we can delete the old one */
      $this->_tools->delOldRecords($res['type'], $res['server_id']);