1: <?php
2: /**
3: * Factory Class for XOOPS Database
4: *
5: * You may not change or alter any portion of this comment or credits
6: * of supporting developers from this source code or any supporting source code
7: * which is considered copyrighted (c) material of the original comment or credit authors.
8: * This program is distributed in the hope that it will be useful,
9: * but WITHOUT ANY WARRANTY; without even the implied warranty of
10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11: *
12: * @copyright (c) 2000-2016 XOOPS Project (www.xoops.org)
13: * @license GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html)
14: * @package kernel
15: * @subpackage database
16: */
17: defined('XOOPS_ROOT_PATH') || exit('Restricted access');
18:
19: /**
20: * XoopsDatabaseFactory
21: *
22: * @package Kernel
23: * @author Kazumi Ono <onokazu@xoops.org>
24: * @access public
25: */
26: class XoopsDatabaseFactory
27: {
28: /**
29: * XoopsDatabaseFactory constructor.
30: */
31: public function __construct()
32: {
33: }
34:
35: /**
36: * Get a reference to the only instance of database class and connects to DB
37: *
38: * if the class has not been instantiated yet, this will also take
39: * care of that
40: *
41: * @static
42: * @staticvar XoopsDatabase The only instance of database class
43: * @return XoopsDatabase Reference to the only instance of database class
44: */
45: public static function getDatabaseConnection()
46: {
47: static $instance;
48: if (!isset($instance)) {
49: if (file_exists($file = XOOPS_ROOT_PATH . '/class/database/' . XOOPS_DB_TYPE . 'database.php')) {
50: require_once $file;
51:
52: if (!defined('XOOPS_DB_PROXY')) {
53: $class = 'Xoops' . ucfirst(XOOPS_DB_TYPE) . 'DatabaseSafe';
54: } else {
55: $class = 'Xoops' . ucfirst(XOOPS_DB_TYPE) . 'DatabaseProxy';
56: }
57:
58: $xoopsPreload = XoopsPreload::getInstance();
59: $xoopsPreload->triggerEvent('core.class.database.databasefactory.connection', array(&$class));
60:
61: $instance = new $class();
62: $instance->setLogger(XoopsLogger::getInstance());
63: $instance->setPrefix(XOOPS_DB_PREFIX);
64: if (!$instance->connect()) {
65: trigger_error('notrace:Unable to connect to database', E_USER_ERROR);
66: }
67: } else {
68: trigger_error('notrace:Failed to load database of type: ' . XOOPS_DB_TYPE . ' in file: ' . __FILE__ . ' at line ' . __LINE__, E_USER_WARNING);
69: }
70: }
71:
72: return $instance;
73: }
74:
75: /**
76: * Gets a reference to the only instance of database class. Currently
77: * only being used within the installer.
78: *
79: * @static
80: * @staticvar object The only instance of database class
81: * @return object Reference to the only instance of database class
82: */
83: public static function getDatabase()
84: {
85: static $database;
86: if (!isset($database)) {
87: if (file_exists($file = XOOPS_ROOT_PATH . '/class/database/' . XOOPS_DB_TYPE . 'database.php')) {
88: include_once $file;
89: if (!defined('XOOPS_DB_PROXY')) {
90: $class = 'Xoops' . ucfirst(XOOPS_DB_TYPE) . 'DatabaseSafe';
91: } else {
92: $class = 'Xoops' . ucfirst(XOOPS_DB_TYPE) . 'DatabaseProxy';
93: }
94: unset($database);
95: $database = new $class();
96: } else {
97: trigger_error('notrace:Failed to load database of type: ' . XOOPS_DB_TYPE . ' in file: ' . __FILE__ . ' at line ' . __LINE__, E_USER_WARNING);
98: }
99: }
100:
101: return $database;
102: }
103: }
104: