1
0
mirror of https://github.com/miguel456/php-http-virtualmin-api synced 2023-07-28 02:52:31 +01:00
2018-04-21 12:17:15 +02:00

131 lines
4.4 KiB
PHP

<?php
namespace Nilemin\Virtualmin\Managers\Account\Email;
use Nilemin\Virtualmin\Http\HttpClientInterface;
use Nilemin\Virtualmin\Entities\Account;
use Nilemin\Virtualmin\Managers\Account\AccountModifier;
use Nilemin\Virtualmin\Managers\BaseManager;
/**
* @author Tsvetelin Tsonev <github.tsonev@yahoo.com>
*/
class EmailManager extends BaseManager implements EmailManagerInterface {
/**
* EmailAccountManager constructor.
*
* @param HttpClient $httpClient
*/
public function __construct(HttpClientInterface $httpClient) {
parent::__construct($httpClient);
}
/**
* Creates email account.
*
* @param string $domain
* @param string $username
* @param string $password
* @param string $realname
* @param int|null $quota Disk quota for the email account in MB.
*
* @return bool TRUE on success, FALSE otherwise
*/
public function createEmailAccount(string $domain, string $username, string $password, string $realname, int $quota = null) : bool {
$this->httpClient->queryStringBuilder()->addParameter("program", "create-user");
$this->httpClient->queryStringBuilder()->addParameter("domain", $domain);
$this->httpClient->queryStringBuilder()->addParameter("user", $username);
$this->httpClient->queryStringBuilder()->addParameter("pass", $password);
$this->httpClient->queryStringBuilder()->addParameter("real", $realname);
if ($quota !== null) {
$quota *= 1000;
$this->httpClient->queryStringBuilder()->addParameter("quota", $quota);
}
return $this->httpClient->sendRequest();
}
/**
* Changes email account quota.
*
* @param string $domain
* @param string $username
* @param int $quota
*
* @return bool TRUE on success, FALSE otherwise
*/
public function changeEmailAccountQuota(string $domain, string $username, int $quota) : bool {
$this->httpClient->queryStringBuilder()->addParameter("program", "modify-user");
$this->httpClient->queryStringBuilder()->addParameter("domain", $domain);
$this->httpClient->queryStringBuilder()->addParameter("user", $username);
$quota *= 1000;
$this->httpClient->queryStringBuilder()->addParameter("quota", $quota);
return $this->httpClient->sendRequest();
}
/**
* Deletes email account.
*
* @param string $domain
* @param string $username
*
* @return bool TRUE on success, FALSE otherwise
*/
public function deleteEmailAccount(string $domain, string $username) : bool {
$handler = new AccountModifier($this->httpClient,$domain, $username);
return $handler->deleteAccount($domain, $username);
}
/**
* Disables email account.
*
* @param string $domain
* @param string $username
*
* @return bool TRUE on success, FALSE otherwise
*/
public function disableEmailAccount(string $domain, string $username) : bool {
$handler = new AccountModifier($this->httpClient, $domain, $username);
return $handler->disableAccount($domain, $username, "email");
}
/**
* Enables email account.
*
* @param string $domain
* @param string $username
*
* @return bool TRUE on success, FALSE otherwise
*/
public function enableEmailAccount(string $domain, string $username) : bool {
$handler = new AccountModifier($this->httpClient, $domain, $username);
return $handler->enableAccount($domain, $username, "email");
}
/**
* Retrieves all email accounts of given domain.
*
* @param $domain
* @return array Array containing \stdClass instances.
*/
public function fetchEmailAccounts($domain) {
$this->httpClient->queryStringBuilder()->addParameter("program", "list-users");
$this->httpClient->queryStringBuilder()->addParameter("domain", $domain);
$this->httpClient->queryStringBuilder()->addParameter("multiline");
$this->httpClient->sendRequest();
return $this->filterEmailAccounts($this->httpClient->getResponseMessage()->data);
}
private function filterEmailAccounts(array $accounts) {
$emailAccounts = [];
foreach ($accounts as $account) {
if ($account->values->login_permissions[0] === "Email only") {
$emailAccounts[] = new Account($account);
}
}
return $emailAccounts;
}
}