Issues (141)

src/Service/DBProps.php (1 issue)

Severity
1
<?php
2
3
namespace CILogon\Service;
4
5
require_once 'DB.php';
6
7
use CILogon\Service\Util;
8
use PEAR;
9
use DB;
10
11
/**
12
 * DBProps
13
 *
14
 * This class reads the config.ini file for the username, password,
15
 * and database name used for storage.  You specify which database type
16
 * to use when calling the constructor, either 'mysql' or 'pgsql'. There
17
 * is also a method getDBConnect to open a PEAR DB database connection
18
 * using the parameters in the config file.
19
 */
20
class DBProps
21
{
22
    /**
23
     * @var string $dbtype Either 'mysqli' or 'pgsql'
24
     */
25
    private $dbtype;
26
27
    /**
28
     * __construct
29
     *
30
     * The constuctor sets the $dbtype class variable.
31
     *
32
     * @param string $db Database type, either 'mysqli' or 'pgsql'.
33
     */
34
    public function __construct($db)
35
    {
36
        $this->dbtype = $db;
37
    }
38
39
    /**
40
     * queryAttribute
41
     *
42
     * This is a general method looks in the cilogon.ini file for the
43
     * named  database configuration attribute.
44
     *
45
     * @param string $attr Name of the attribute to query, one of
46
     *        'username', 'password', or 'database'.
47
     * @return string The value of the desired attribute, or empty string
48
     *         on error.
49
     */
50
    public function queryAttribute($attr)
51
    {
52
        return constant(strtoupper($this->dbtype) . '_' . strtoupper($attr));
53
    }
54
55
    /**
56
     * getUsername
57
     *
58
     * This is a convenience method which calls queryAttribute to get
59
     * the database username.
60
     *
61
     * @return string The username for the selected database type.
62
     */
63
    public function getUsername()
64
    {
65
        return $this->queryAttribute('username');
66
    }
67
68
    /**
69
     * getPassword
70
     *
71
     * This is a convenience method which calls queryAttribute to get
72
     * the database password.
73
     *
74
     * @return string The password for the selected database type.
75
     */
76
    public function getPassword()
77
    {
78
        return $this->queryAttribute('password');
79
    }
80
81
    /**
82
     * getDatabase
83
     *
84
     * This is a convenience method which calls queryAttribute to get
85
     * the database name.
86
     *
87
     * @return string The database name for the selected database type.
88
     */
89
    public function getDatabase()
90
    {
91
        return $this->queryAttribute('database');
92
    }
93
94
    /**
95
     * getHostspec
96
     *
97
     * This is a convenience method which calls queryAttribute to get
98
     * the hostspec, i.e., 'host:port' to connect to. If the hostspec
99
     * has not been configured, return 'localhost'.
100
     *
101
     * @return string The hostspec type for the selected database type.
102
     *         Defaults to 'localhost'.
103
     */
104
    public function getHostspec()
105
    {
106
        $hostspec = $this->queryAttribute('hostspec');
107
        if (strlen($hostspec) == 0) {
108
            $hostspec = 'localhost';
109
        }
110
        return $hostspec;
111
    }
112
113
    /**
114
     * getDBConnect
115
     *
116
     * This function uses the PEAR DB module to connect to database
117
     * using the parameters found in config.secrets.php. Upon
118
     * success, it returns a DB connection returned by 'DB::connect'
119
     * suitable for future DB calls. If there is a problem connecting,
120
     * it returns null.
121
     *
122
     * @return DB A PEAR DB object connected to a database, or null
123
     *         on error connecting to database.
124
     */
125
    public function getDBConnect()
126
    {
127
        $db = new DB(); // So defined constants get read in
0 ignored issues
show
The assignment to $db is dead and can be removed.
Loading history...
128
        $dsn = array(
129
            'phptype'  => $this->dbtype,
130
            'username' => $this->getUsername(),
131
            'password' => $this->getPassword(),
132
            'database' => $this->getDatabase(),
133
            'hostspec' => $this->getHostspec()
134
        );
135
136
        $opts = array(
137
            'persistent'  => true,
138
            'portability' => DB_PORTABILITY_ALL
139
        );
140
141
        $retval = DB::connect($dsn, $opts);
142
        if (PEAR::isError($retval)) {
143
            $retval = null;
144
        }
145
146
        return $retval;
147
    }
148
}
149