From fc0107734667e7a4ac657af4a7a61ce324655eb5 Mon Sep 17 00:00:00 2001 From: alban Date: Fri, 4 Jul 2014 22:57:20 +0200 Subject: [PATCH] [enh] diagnostic:service:mail --- lib/Alternc/Diagnostic/Service/Mail.php | 101 ++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/lib/Alternc/Diagnostic/Service/Mail.php b/lib/Alternc/Diagnostic/Service/Mail.php index 0f6976e4..c0b9ec36 100644 --- a/lib/Alternc/Diagnostic/Service/Mail.php +++ b/lib/Alternc/Diagnostic/Service/Mail.php @@ -11,8 +11,109 @@ class Alternc_Diagnostic_Service_Mail { public $name = "email"; + + protected $mailList = array(); + + const SECTION_LIST = "list"; + const SECTION_STAT_ALIAS = "stat_alias"; + const SECTION_CHECK_STORAGE = "check_storage"; + function run(){ + + // Attempts to retrieve all email addresses + $this->mailList = $this->getList(); + + // Writes the domains list + $this->writeSectionData (self::SECTION_LIST,$this->getList()); + + // Writes the alias stats + $this->writeSectionData (self::SECTION_STAT_ALIAS,$this->getStatAlias()); + + // Writes the quota stats + $this->writeSectionData (self::SECTION_CHECK_STORAGE,$this->getCheckStorage()); + + return $this->data; } + + /** + * Gets list from db + * + * @return array + */ + function getList(){ + $returnArray = array(); + // Check the availability + $this->db->query(' + SELECT CONCAT(a.address,"@",d.domaine) as email, a.type, a.enabled, r.recipients, m.path,m.quota,m.bytes/(1024*1024) as size_mo,m.messages + FROM address a + LEFT JOIN recipient r ON r.address_id = a.id + LEFT JOIN mailbox m ON m.address_id = a.id + JOIN domaines d ON a.domain_id = d.id;'); + if ($this->db->num_rows()) { + while ($this->db->next_record()) { + $email = $this->db->f("email"); + $returnArray[$email] = array( + "enabled" => $this->db->f("enabled"), + "type" => $this->db->f("type"), + "recipients" => $this->db->f("recipients"), + "path" => $this->db->f("path"), + "quota" => $this->db->f("quota"), + "size_mo" => $this->db->f("size_mo"), + "messages" => $this->db->f("messages"), + ); + } + } + return $returnArray; + } + /** + * Searches mails with alias + * + * @return array + */ + function getStatAlias() { + $returnArray = array(); + foreach ($this->mailList as $email => $emailInfo) { + $is_alias = false; + if( !is_null($emailInfo["recipients"])){ + $is_alias = true; + } + $returnArray[$email] = $is_alias; + } + return $returnArray; + + } + + /** + * Checks the box oversize and effective existence + * + * @return array + */ + function getCheckStorage() { + $returnArray = array(); + foreach ($this->mailList as $email => $emailInfo) { + // Only account real boxes + if( ! $emailInfo["path"]){ + continue; + } + $quota_pct = "0"; + $box_exists = true; + $quota = $emailInfo["quota"]; + $size_mo = $emailInfo["size_mo"] ; + if( $quota > 0 ){ + $quota_pct = $size_mo * 100 / $quota; + } + if( !is_dir($emailInfo["path"]) ){ + $box_exists = false; + } + $returnArray[$email] = array( + "percent" => number_format($quota_pct, 2), + "box_exists" => $box_exists + ); + } + return $returnArray; + + } + } \ No newline at end of file