Tutorial Extension  1.0.0
SellerDeck Extensions - Tutorial Extension
CDataBaseFactory.php
1 <?php
2 
3 /**
4  * CDataBaseFactory.php - Implementation file for DataBase Factory class.
5  *
6  * @package SellerDeck Extensions
7  *
8  * @author Péter Erdődi
9  * @copyright © SellerDeck Ltd 2015. All rights reserved.
10  */
11 
12 namespace SDExtension\DB;
13 
15  {
16 
17  /**
18  * @var object $m_oCatalogDB Catalog DB
19  */
20  static $m_oCatalogDB = null;
21 
22  /**
23  * @var object $m_oShippingDB Shipping DB
24  */
25  static $m_oShippingDB = null;
26 
27  /**
28  * @var bool $m_bPDO PDO
29  */
30  static $m_bPDO = true;
31 
32  /**
33  * createAll - Creates all Database connections
34  *
35  * @access public
36  * @param string $aConfiguration Database Configuration
37  * @return array Array of CDataBase objects
38  */
39  public static function createAll($aConfiguration)
40  {
41  return [
42  static::GetCatalogDB($aConfiguration),
43  static::GetShippingDB($aConfiguration),
44  ];
45  }
46 
47  /**
48  * GetCatalogDB - Gets or Creates Catalog Database connection
49  *
50  * @access public
51  * @param array $aConfiguration Database Configuration
52  * @return CDataBase
53  */
54  public static function GetCatalogDB($aConfiguration = [])
55  {
56  if (null == static::$m_oCatalogDB)
57  {
58  static::$m_oCatalogDB = static::CreateConnection($aConfiguration, DB_CATALOG);
59  }
60  return static::$m_oCatalogDB;
61  }
62 
63  /**
64  * GetShippingDB - Gets or Creates Shipping Database connection
65  *
66  * @access public
67  * @param array $aConfiguration Database Configuration
68  * @return CDataBase
69  */
70  public static function GetShippingDB($aConfiguration = [])
71  {
72  if (null == static::$m_oShippingDB)
73  {
74  static::$m_oShippingDB = static::CreateConnection($aConfiguration, DB_SHIPPING);
75  }
76  return static::$m_oShippingDB;
77  }
78 
79  /**
80  * CreateConnection - Creates Database connection
81  *
82  * @access protected
83  * @param array $aConfiguration Connection Details
84  * @param string $sDatabaseID Database ID
85  * @return CDataBase DataBase object
86  */
87  protected static function CreateConnection($aConfiguration, $sDatabaseID = DB_CATALOG)
88  {
89  static::$m_bPDO = is_PDO();
90  $sDBType = arr_get($aConfiguration, 'dbtype', DB_TYPE_ACCESS);
91  $sDBAuthType = "";
92  switch ($sDBType)
93  {
94  case DB_TYPE_ACCESS:
95  $sDsn = static::createAccessDsn($aConfiguration, $sDatabaseID);
96  $sDriverClass = static::$m_bPDO ? DB_CLASS_ACCESS : DB_CLASS_ACCESS_NO_PDO;
97  $sUser = "";
98  $sPassword = "";
99  $aDataBases = [
100  DB_CATALOG => arr_get($aConfiguration, 'catalogdbfilepath', 'Site1\\ActinicCatalog.mdb'),
101  DB_SHIPPING => arr_get($aConfiguration, 'shippingdbfilepath', 'Site1\\ShipControl\\SimpleShipping.mdb'),
102  ];
103  break;
104  case DB_TYPE_SQLSERVER:
105  $sDsn = static::createSQLServerDsn($aConfiguration, $sDatabaseID);
106  $sDriverClass = DB_CLASS_SQLSERVER;
107  $sUser = arr_get($aConfiguration, 'username', '');
108  $sPassword = arr_get($aConfiguration, 'userpwd', '');
109  $sDBAuthType = arr_get($aConfiguration, 'dbauthtype', '');
110  $aDataBases = [
111  DB_CATALOG => arr_get($aConfiguration, 'catalogdbsqlname', 'NewSite_Catalog'),
112  DB_SHIPPING => arr_get($aConfiguration, 'shippingdbsqlname', 'NewSite_Shipping'),
113  ];
114  break;
115  }
116  $aConnectionDetails = [
117  'sDsn' => $sDsn,
118  'sUser' => $sUser,
119  'sPassword' => $sPassword,
120  'sDBAuthType' => $sDBAuthType,
121  'sDatabaseID' => $sDatabaseID,
122  'aDataBases' => $aDataBases,
123  ];
124  $sDriverClassWithNS = "SDExtension\DB\\$sDriverClass";
125  return new $sDriverClassWithNS($aConnectionDetails, $sDatabaseID);
126  }
127 
128  /**
129  * createAccessDsn - Creates MS Access DSN
130  *
131  * @access protected
132  * @param array $aConfiguration Connection Details
133  * @param string $sDatabaseID Database ID
134  * @return string
135  */
136  protected static function createAccessDsn($aConfiguration, $sDatabaseID = DB_CATALOG)
137  {
138  $sMdbFile = "";
139  switch ($sDatabaseID)
140  {
141  case DB_CATALOG:
142  $sMdbFile = arr_get($aConfiguration, 'catalogdbfilepath', '');
143  break;
144  case DB_SHIPPING:
145  $sMdbFile = arr_get($aConfiguration, 'shippingdbfilepath', '');
146  break;
147  }
148  return static::createAccessDsnString($sMdbFile);
149  }
150 
151  /**
152  * createAccessDsnString - Creates MS Access DSN
153  *
154  * @access protected
155  * @param string $sMdbFile MDB File
156  * @return string
157  */
158  public static function createAccessDsnString($sMdbFile)
159  {
160  $sPrefix = static::$m_bPDO ? "odbc:" : "";
161  return $sPrefix . "Driver={Microsoft Access Driver (*.mdb)};Dbq=$sMdbFile;Uid=";
162  }
163 
164  /**
165  * createSQLServerDsn - Creates MS SQL Server DSN
166  *
167  * @access protected
168  * @param array $aConfiguration Connection Details
169  * @param string $sDatabaseID Database ID
170  * @return string
171  */
172  protected static function createSQLServerDsn($aConfiguration, $sDatabaseID = DB_CATALOG)
173  {
174  $sDBName = "";
175  switch ($sDatabaseID)
176  {
177  case DB_CATALOG:
178  $sDBName = arr_get($aConfiguration, 'catalogdbsqlname', '');
179  break;
180  case DB_SHIPPING:
181  $sDBName = arr_get($aConfiguration, 'shippingdbsqlname', '');
182  break;
183  }
184  $sServer = arr_get($aConfiguration, 'servername', '');
185  return "sqlsrv:server=$sServer;Database=$sDBName";
186  }
187 
188  }
static GetShippingDB($aConfiguration=[])
static createSQLServerDsn($aConfiguration, $sDatabaseID=DB_CATALOG)
static createAccessDsn($aConfiguration, $sDatabaseID=DB_CATALOG)
static GetCatalogDB($aConfiguration=[])
static createAll($aConfiguration)
static CreateConnection($aConfiguration, $sDatabaseID=DB_CATALOG)