blob: 3dead276c85238118be3ec2f47c0adf5c9f6ad51 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
<?php
/**
* CinisisDb main class.
*/
class CinisisDb {
/**
* @var $db
* Database resource.
*/
var $db;
/**
* @var $implementation
* Database implementation.
*/
var $implementation;
/**
* Constructor.
*
* @param $config
* Optional parameter to set alternative config file or array
* with configuration.
*/
function __construct($config = 'config/config.yaml') {
try {
// Check main configuration.
$config = $this->parse($config);
// Set database implementation.
$this->implementation = $config['implementation'] .'Db';
// Check database schema.
$schema = $this->parse('schemas/'. $config['database'] .'.yaml', $this->implementation);
} catch (Exception $e) {
echo __CLASS__ .' caught exception: ', $e->getMessage(), "\n";
return FALSE;
}
// Setup database connection.
$this->db = new $this->implementation($schema);
}
/**
* Config file load.
*
* @param $file
* Config file.
*
* @return
* Array with configuration or FALSE if error.
*/
public function load($file) {
if (!file_exists($file)) {
throw new Exception('Config '. $file .' not found.');
return FALSE;
}
// Load configuration.
return Spyc::YAMLLoad($file);
}
/**
* Parse configuration.
*
* @param $config
* Config file or array with configuration.
*
* @param $class
* Configuration class name.
*
* @return
* Array with configuration or FALSE on error.
*/
public function parse($config, $class = __CLASS__) {
// Load configuration if needed.
if (!is_array($config)) {
$config = $this->load($config);
}
// Check configuration.
return call_user_func(array($class, 'check'), $config);
}
/**
* Check configuration.
*
* @param $config
* Config file or array with configuration.
*
* @return
* Array with configuration or FALSE on error.
*/
public function check($config) {
// Set default database backend if needed.
if (!isset($config['implementation'])) {
$config['implementation'] = 'PhpIsis';
}
// Check database configuration.
if (!isset($config['database'])) {
throw new Exception('No database set on configuration.');
return FALSE;
}
return $config;
}
}
|