Completed
Push — master ( 8eb78c...be9ae1 )
by Niels
8s
created

Database::createAccessHost()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
/**
3
 * DirectAdmin
4
 * (c) Omines Internetbureau B.V.
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
namespace Omines\DirectAdmin\Objects;
11
use Omines\DirectAdmin\Context\UserContext;
12
use Omines\DirectAdmin\Objects\Users\User;
13
14
/**
15
 * Database
16
 *
17
 * @author Niels Keurentjes <[email protected]>
18
 */
19
class Database extends Object
20
{
21
    const CACHE_ACCESS_HOSTS = 'access_hosts';
22
23
    /** @var User */
24
    private $owner;
25
26
    /** @var string */
27
    private $databaseName;
28
    /**
29
     * @param array $info
30
     * @param UserContext $context Context within which the object is valid.
31
     */
32
    public function __construct($name, User $owner, UserContext $context)
33
    {
34
        parent::__construct($name, $context);
35
        $this->owner = $owner;
36
        $this->databaseName = $this->owner->getUsername() . '_' . $this->getName();
37
    }
38
39
    /**
40
     * Creates a new database under the specified user.
41
     *
42
     * @param User $user Owner of the database.
43
     * @param string $name Database name, without <user>_ prefix.
44
     * @param string $username Username to access the database with, without <user>_ prefix.
45
     * @param string|null $password Password, or null if database user already exists.
46
     * @return Database Newly created database.
47
     */
48
    public static function create(User $user, $name, $username, $password)
49
    {
50
        $options = [
51
            'action' => 'create',
52
            'name' => $name,
53
        ];
54
        if(!empty($password)) {
55
            $options += ['user' => $username, 'passwd' => $password, 'passwd2' => $password];
56
        } else {
57
            $options += ['userlist' => $username];
58
        }
59
        $user->getContext()->invokePost('DATABASES', $options);
60
        return new self($name, $user, $user->getContext());
61
    }
62
63
    /**
64
     * Deletes this database from the user.
65
     */
66
    public function delete()
67
    {
68
        $this->getContext()->invokePost('DATABASES', [
69
            'action' => 'delete',
70
            'select0' => $this->getDatabaseName(),
71
        ]);
72
        $this->getContext()->getContextUser()->clearCache();
73
    }
74
75
    /**
76
     * @return Database\AccessHost[]
77
     */
78
    public function getAccessHosts()
79
    {
80
        return $this->getCache(self::CACHE_ACCESS_HOSTS, function() {
81
            $accessHosts = $this->getContext()->invokeGet('DATABASES', [
82
                'action' => 'accesshosts',
83
                'db' => $this->getDatabaseName(),
84
            ]);
85
86
            return array_map(function($name) {
87
                return new Database\AccessHost($name, $this);
88
            }, $accessHosts);
89
        });
90
    }
91
92
    /**
93
     * @param string $name
94
     * @return Database\AccessHost
95
     */
96
    public function createAccessHost($name)
97
    {
98
        $accessHost = Database\AccessHost::create($this, $name);
99
        $this->getContext()->getContextUser()->clearCache();
100
        return $accessHost;
101
    }
102
103
    /**
104
     * @return string Name of the database.
105
     */
106
    public function getDatabaseName()
107
    {
108
        return $this->databaseName;
109
    }
110
111
    /**
112
     * @return User
113
     */
114
    public function getOwner()
115
    {
116
        return $this->owner;
117
    }
118
}
119