2014-01-23 11:42:54 -04:00
|
|
|
<?php
|
|
|
|
|
namespace BusinessModel;
|
|
|
|
|
|
|
|
|
|
use \G;
|
|
|
|
|
use \DbSource;
|
|
|
|
|
use \dbConnections;
|
|
|
|
|
|
|
|
|
|
class DataBaseConnection
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* List of DataBaseConnections in process
|
2014-02-06 12:36:46 -04:00
|
|
|
* @var string $pro_uid. Uid for Process
|
2014-01-23 11:42:54 -04:00
|
|
|
*
|
|
|
|
|
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
|
|
|
* @copyright Colosa - Bolivia
|
|
|
|
|
*
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2014-02-06 12:36:46 -04:00
|
|
|
public function getDataBaseConnections($pro_uid)
|
2014-01-23 11:42:54 -04:00
|
|
|
{
|
2014-02-06 12:36:46 -04:00
|
|
|
$pro_uid = $this->validateProUid($pro_uid);
|
|
|
|
|
|
2014-01-23 11:42:54 -04:00
|
|
|
$oDBSource = new DbSource();
|
2014-02-06 12:36:46 -04:00
|
|
|
$oCriteria = $oDBSource->getCriteriaDBSList($pro_uid);
|
2014-01-28 11:34:07 -04:00
|
|
|
|
2014-01-23 11:42:54 -04:00
|
|
|
$rs = \DbSourcePeer::doSelectRS($oCriteria);
|
|
|
|
|
$rs->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
|
|
|
|
|
$rs->next();
|
|
|
|
|
|
|
|
|
|
$dbConnecions = array();
|
|
|
|
|
while ($row = $rs->getRow()) {
|
|
|
|
|
$row = array_change_key_case($row, CASE_LOWER);
|
2014-02-06 12:36:46 -04:00
|
|
|
$dataDb = $this->getDataBaseConnection($pro_uid, $row['dbs_uid'], false);
|
2014-01-23 11:42:54 -04:00
|
|
|
$dbConnecions[] = array_change_key_case($dataDb, CASE_LOWER);
|
|
|
|
|
$rs->next();
|
|
|
|
|
}
|
|
|
|
|
return $dbConnecions;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get data for DataBaseConnection
|
2014-02-06 12:36:46 -04:00
|
|
|
* @var string $pro_uid. Uid for Process
|
|
|
|
|
* @var string $dbs_uid. Uid for Data Base Connection
|
|
|
|
|
*
|
|
|
|
|
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
|
|
|
* @copyright Colosa - Bolivia
|
2014-01-23 11:42:54 -04:00
|
|
|
*
|
|
|
|
|
* return object
|
|
|
|
|
*/
|
2014-02-06 12:36:46 -04:00
|
|
|
public function getDataBaseConnection($pro_uid, $dbs_uid, $validate = true)
|
2014-01-23 11:42:54 -04:00
|
|
|
{
|
|
|
|
|
try {
|
2014-02-06 12:36:46 -04:00
|
|
|
if ($validate) {
|
|
|
|
|
$pro_uid = $this->validateProUid($pro_uid);
|
|
|
|
|
$dbs_uid = $this->validateDbsUid($dbs_uid, $pro_uid);
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-23 11:42:54 -04:00
|
|
|
G::LoadClass( 'dbConnections' );
|
2014-02-06 12:36:46 -04:00
|
|
|
$dbs = new dbConnections($pro_uid);
|
2014-01-23 11:42:54 -04:00
|
|
|
$oDBConnection = new DbSource();
|
2014-02-06 12:36:46 -04:00
|
|
|
$aFields = $oDBConnection->load($dbs_uid, $pro_uid);
|
2014-01-23 11:42:54 -04:00
|
|
|
if ($aFields['DBS_PORT'] == '0') {
|
|
|
|
|
$aFields['DBS_PORT'] = '';
|
|
|
|
|
}
|
|
|
|
|
$aFields['DBS_PASSWORD'] = $dbs->getPassWithoutEncrypt($aFields);
|
|
|
|
|
|
|
|
|
|
$response = array_change_key_case($aFields, CASE_LOWER);
|
|
|
|
|
return $response;
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Save Data for DataBaseConnection
|
2014-02-06 12:36:46 -04:00
|
|
|
* @var string $pro_uid. Uid for Process
|
2014-01-23 11:42:54 -04:00
|
|
|
* @var string $dataDataBaseConnection. Data for DataBaseConnection
|
|
|
|
|
* @var string $create. Create o Update DataBaseConnection
|
|
|
|
|
* @var string $sDataBaseConnectionUid. Uid for DataBaseConnection
|
|
|
|
|
*
|
|
|
|
|
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
|
|
|
* @copyright Colosa - Bolivia
|
|
|
|
|
*
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2014-02-06 12:36:46 -04:00
|
|
|
public function saveDataBaseConnection($pro_uid = '', $dataDBConnection = array(), $create = false)
|
2014-01-23 11:42:54 -04:00
|
|
|
{
|
2014-02-06 12:36:46 -04:00
|
|
|
$pro_uid = $this->validateProUid($pro_uid);
|
|
|
|
|
if (!$create) {
|
|
|
|
|
$dbs_uid = $dataDBConnection['dbs_uid'];
|
|
|
|
|
$dbs_uid = $this->validateDbsUid($dbs_uid, $pro_uid);
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-23 11:42:54 -04:00
|
|
|
G::LoadClass('dbConnections');
|
|
|
|
|
$oDBSource = new DbSource();
|
|
|
|
|
$oContent = new \Content();
|
|
|
|
|
$dataDBConnection = array_change_key_case($dataDBConnection, CASE_UPPER);
|
|
|
|
|
|
2014-02-06 12:36:46 -04:00
|
|
|
$dataDBConnection['PRO_UID'] = $pro_uid;
|
2014-01-23 11:42:54 -04:00
|
|
|
|
|
|
|
|
if (isset($dataDBConnection['DBS_TYPE'])) {
|
|
|
|
|
$typesExists = array();
|
|
|
|
|
G::LoadClass( 'dbConnections' );
|
2014-02-06 12:36:46 -04:00
|
|
|
$dbs = new dbConnections($pro_uid);
|
2014-01-23 11:42:54 -04:00
|
|
|
$dbServices = $dbs->getDbServicesAvailables();
|
|
|
|
|
foreach ($dbServices as $value) {
|
|
|
|
|
$typesExists[] = $value['id'];
|
|
|
|
|
}
|
|
|
|
|
if (!in_array($dataDBConnection['DBS_TYPE'], $typesExists)) {
|
|
|
|
|
throw (new \Exception("This 'dbs_type' is invalid"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($dataDBConnection['DBS_TYPE'])) {
|
|
|
|
|
$typesExists = array();
|
2014-01-28 11:34:07 -04:00
|
|
|
|
2014-02-06 12:36:46 -04:00
|
|
|
$dbs = new dbConnections($pro_uid);
|
2014-01-23 11:42:54 -04:00
|
|
|
$dbServices = $dbs->getDbServicesAvailables();
|
|
|
|
|
foreach ($dbServices as $value) {
|
|
|
|
|
$typesExists[] = $value['id'];
|
|
|
|
|
}
|
|
|
|
|
if (!in_array($dataDBConnection['DBS_TYPE'], $typesExists)) {
|
|
|
|
|
throw (new \Exception("This 'dbs_type' is invalid"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($dataDBConnection['DBS_ENCODE'])) {
|
|
|
|
|
$encodesExists = array();
|
|
|
|
|
$dbs = new dbConnections();
|
|
|
|
|
$dbEncodes = $dbs->getEncondeList($dataDBConnection['DBS_TYPE']);
|
|
|
|
|
foreach ($dbEncodes as $value) {
|
|
|
|
|
$encodesExists[] = $value['0'];
|
|
|
|
|
}
|
|
|
|
|
if (!in_array($dataDBConnection['DBS_ENCODE'], $encodesExists)) {
|
|
|
|
|
throw (new \Exception( "This 'dbs_encode' is invalid for '" . $dataDBConnection['DBS_TYPE'] . "'" ));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$passOrigin = '';
|
|
|
|
|
if (isset($dataDBConnection['DBS_PASSWORD'])) {
|
|
|
|
|
$passOrigin = $dataDBConnection['DBS_PASSWORD'];
|
|
|
|
|
if ($dataDBConnection['DBS_PASSWORD'] == 'none') {
|
|
|
|
|
$dataDBConnection['DBS_PASSWORD'] = '';
|
|
|
|
|
} else {
|
|
|
|
|
$pass = G::encrypt( $dataDBConnection['DBS_PASSWORD'], $dataDBConnection['DBS_DATABASE_NAME']) . "_2NnV3ujj3w";
|
|
|
|
|
$dataDBConnection['DBS_PASSWORD'] = $pass;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($create) {
|
|
|
|
|
unset($dataDBConnection['DBS_UID']);
|
|
|
|
|
// TEST CONNECTION
|
|
|
|
|
$dataTest = array_merge($dataDBConnection, array('DBS_PASSWORD' => $passOrigin));
|
|
|
|
|
$resTest = $this->testConnection($dataTest);
|
|
|
|
|
if (!$resTest['resp']) {
|
|
|
|
|
throw (new \Exception($resTest['message']));
|
|
|
|
|
}
|
|
|
|
|
$newDBConnectionUid = $oDBSource->create($dataDBConnection);
|
|
|
|
|
$oContent->addContent('DBS_DESCRIPTION', '', $newDBConnectionUid,
|
|
|
|
|
SYS_LANG, $dataDBConnection['DBS_DESCRIPTION'] );
|
2014-02-06 12:36:46 -04:00
|
|
|
$newDataDBConnection = $this->getDataBaseConnection($pro_uid, $newDBConnectionUid);
|
2014-01-23 11:42:54 -04:00
|
|
|
$newDataDBConnection = array_change_key_case($newDataDBConnection, CASE_LOWER);
|
|
|
|
|
return $newDataDBConnection;
|
|
|
|
|
} else {
|
|
|
|
|
// TEST CONNECTION
|
2014-02-06 12:36:46 -04:00
|
|
|
$allData = $this->getDataBaseConnection($pro_uid, $dataDBConnection['DBS_UID']);
|
2014-01-23 11:42:54 -04:00
|
|
|
$dataTest = array_merge($allData, $dataDBConnection);
|
|
|
|
|
$resTest = $this->testConnection($dataTest);
|
|
|
|
|
if (!$resTest['resp']) {
|
|
|
|
|
throw (new \Exception($resTest['message']));
|
|
|
|
|
}
|
|
|
|
|
$oDBSource->update($dataDBConnection);
|
|
|
|
|
if (isset($dataDBConnection['DBS_DESCRIPTION'])) {
|
|
|
|
|
$oContent->addContent('DBS_DESCRIPTION', '', $dataDBConnection['DBS_UID'],
|
|
|
|
|
SYS_LANG, $dataDBConnection['DBS_DESCRIPTION'] );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delete DataBaseConnection
|
2014-02-06 12:36:46 -04:00
|
|
|
* @var string $pro_uid. Uid for Process
|
|
|
|
|
* @var string $dbs_uid. Uid for DataBase Connection
|
2014-01-23 11:42:54 -04:00
|
|
|
*
|
|
|
|
|
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
|
|
|
* @copyright Colosa - Bolivia
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
2014-02-06 12:36:46 -04:00
|
|
|
public function deleteDataBaseConnection($pro_uid, $dbs_uid)
|
2014-01-23 11:42:54 -04:00
|
|
|
{
|
2014-02-06 12:36:46 -04:00
|
|
|
$pro_uid = $this->validateProUid($pro_uid);
|
|
|
|
|
$dbs_uid = $this->validateDbsUid($dbs_uid, $pro_uid);
|
|
|
|
|
|
2014-01-23 11:42:54 -04:00
|
|
|
$oDBSource = new DbSource();
|
|
|
|
|
$oContent = new \Content();
|
|
|
|
|
|
2014-02-06 12:36:46 -04:00
|
|
|
$oDBSource->remove($dbs_uid, $pro_uid);
|
|
|
|
|
$oContent->removeContent( 'DBS_DESCRIPTION', "", $dbs_uid );
|
2014-01-23 11:42:54 -04:00
|
|
|
}
|
|
|
|
|
|
2014-02-06 12:36:46 -04:00
|
|
|
/**
|
|
|
|
|
* Test DataBase Connection
|
|
|
|
|
* @var string $dataCon. Data for DataBase Connection
|
|
|
|
|
* @var string $returnArray. Flag for url
|
|
|
|
|
*
|
|
|
|
|
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
|
|
|
* @copyright Colosa - Bolivia
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
2014-02-06 10:42:04 -04:00
|
|
|
public function testConnection($dataCon, $returnArray = false)
|
2014-01-25 06:10:24 -04:00
|
|
|
{
|
2014-01-23 11:42:54 -04:00
|
|
|
$resp = array();
|
2014-02-06 10:42:04 -04:00
|
|
|
$respTest = array();
|
2014-01-23 11:42:54 -04:00
|
|
|
$resp['resp'] = false;
|
|
|
|
|
|
2014-02-06 10:42:04 -04:00
|
|
|
$dataCon = array_change_key_case($dataCon, CASE_UPPER);
|
|
|
|
|
|
2014-01-23 11:42:54 -04:00
|
|
|
G::LoadClass( 'net' );
|
|
|
|
|
$Server = new \NET($dataCon['DBS_SERVER']);
|
|
|
|
|
|
|
|
|
|
// STEP 1 : Resolving Host Name
|
2014-02-06 10:42:04 -04:00
|
|
|
$respTest['0'] = array();
|
|
|
|
|
$respTest['0']['test'] = 'Resolving Host Name ' . $dataCon['DBS_SERVER'];
|
2014-01-23 11:42:54 -04:00
|
|
|
if ($Server->getErrno() != 0) {
|
2014-02-06 10:42:04 -04:00
|
|
|
if ($returnArray) {
|
|
|
|
|
$respTest['0']['error'] = "Error Testting Connection: Resolving Host Name FAILED : " . $Server->error;
|
|
|
|
|
} else {
|
|
|
|
|
$resp['message'] = "Error Testting Connection: Resolving Host Name FAILED : " . $Server->error;
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
2014-01-23 11:42:54 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// STEP 2 : Checking port
|
2014-02-06 10:42:04 -04:00
|
|
|
$respTest['1'] = array();
|
|
|
|
|
$respTest['1']['test'] = 'Checking port ' . $dataCon['DBS_PORT'];
|
2014-01-23 11:42:54 -04:00
|
|
|
$Server->scannPort($dataCon['DBS_PORT']);
|
|
|
|
|
if ($Server->getErrno() != 0) {
|
2014-02-06 10:42:04 -04:00
|
|
|
if ($returnArray) {
|
|
|
|
|
$respTest['1']['error'] = "Error Testting Connection: Checking port FAILED : " . $Server->error;
|
|
|
|
|
} else {
|
|
|
|
|
$resp['message'] = "Error Testting Connection: Checking port FAILED : " . $Server->error;
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
2014-01-23 11:42:54 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// STEP 3 : Trying to connect to host
|
2014-02-06 10:42:04 -04:00
|
|
|
$respTest['2'] = array();
|
|
|
|
|
$respTest['2']['test'] = 'Trying to connect to host ' . $dataCon['DBS_SERVER'] . (($dataCon['DBS_PORT'] != '') ? ':'.$dataCon['DBS_PORT'] : '');
|
2014-01-23 11:42:54 -04:00
|
|
|
$Server->loginDbServer($dataCon['DBS_USERNAME'], $dataCon['DBS_PASSWORD']);
|
|
|
|
|
$Server->setDataBase($dataCon['DBS_DATABASE_NAME'], $dataCon['DBS_PORT']);
|
|
|
|
|
if ($Server->errno == 0) {
|
|
|
|
|
$response = $Server->tryConnectServer($dataCon['DBS_TYPE']);
|
|
|
|
|
if ($response->status != 'SUCCESS') {
|
2014-02-06 10:42:04 -04:00
|
|
|
if ($returnArray) {
|
|
|
|
|
$respTest['2']['error'] = "Error Testting Connection: Trying to connect to host FAILED : " . $Server->error;
|
|
|
|
|
} else {
|
|
|
|
|
$resp['message'] = "Error Testting Connection: Trying to connect to host FAILED : " . $Server->error;
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ($returnArray) {
|
|
|
|
|
$respTest['2']['error'] = "Error Testting Connection: Trying to connect to host FAILED : " . $Server->error;
|
|
|
|
|
} else {
|
2014-01-23 11:42:54 -04:00
|
|
|
$resp['message'] = "Error Testting Connection: Trying to connect to host FAILED : " . $Server->error;
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-01-28 11:34:07 -04:00
|
|
|
|
2014-01-23 11:42:54 -04:00
|
|
|
// STEP 4 : Trying to open database
|
2014-02-06 10:42:04 -04:00
|
|
|
$respTest['3'] = array();
|
|
|
|
|
$respTest['3']['test'] = 'Trying to open database [' . $dataCon['DBS_DATABASE_NAME'] . ']';
|
2014-01-23 11:42:54 -04:00
|
|
|
$Server->loginDbServer($dataCon['DBS_USERNAME'], $dataCon['DBS_PASSWORD']);
|
|
|
|
|
$Server->setDataBase($dataCon['DBS_DATABASE_NAME'], $dataCon['DBS_PORT']);
|
|
|
|
|
if ($Server->errno == 0) {
|
|
|
|
|
$response = $Server->tryConnectServer($dataCon['DBS_TYPE']);
|
|
|
|
|
if ($response->status == 'SUCCESS') {
|
|
|
|
|
$response = $Server->tryOpenDataBase($dataCon['DBS_TYPE']);
|
|
|
|
|
if ($response->status != 'SUCCESS') {
|
2014-02-06 10:42:04 -04:00
|
|
|
if ($returnArray) {
|
|
|
|
|
$respTest['3']['error'] = "Error Testting Connection: Trying to open database FAILED : " . $Server->error;
|
|
|
|
|
} else {
|
|
|
|
|
$resp['message'] = "Error Testting Connection: Trying to open database FAILED : " . $Server->error;
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ($returnArray) {
|
|
|
|
|
$respTest['3']['error'] = "Error Testting Connection: Trying to open database FAILED : " . $Server->error;
|
|
|
|
|
} else {
|
2014-01-23 11:42:54 -04:00
|
|
|
$resp['message'] = "Error Testting Connection: Trying to open database FAILED : " . $Server->error;
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
2014-02-06 10:42:04 -04:00
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ($returnArray) {
|
|
|
|
|
$respTest['3']['error'] = "Error Testting Connection: Trying to open database FAILED : " . $Server->error;
|
2014-01-23 11:42:54 -04:00
|
|
|
} else {
|
|
|
|
|
$resp['message'] = "Error Testting Connection: Trying to open database FAILED : " . $Server->error;
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
2014-02-06 10:42:04 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($returnArray) {
|
|
|
|
|
return $respTest;
|
2014-01-23 11:42:54 -04:00
|
|
|
} else {
|
2014-02-06 10:42:04 -04:00
|
|
|
// CORRECT CONNECTION
|
|
|
|
|
$resp['resp'] = true;
|
2014-01-23 11:42:54 -04:00
|
|
|
return $resp;
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-02-06 12:36:46 -04:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validate Process Uid
|
|
|
|
|
* @var string $pro_uid. Uid for process
|
|
|
|
|
*
|
|
|
|
|
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
|
|
|
* @copyright Colosa - Bolivia
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
public function validateProUid ($pro_uid) {
|
|
|
|
|
$pro_uid = trim($pro_uid);
|
|
|
|
|
if ($pro_uid == '') {
|
|
|
|
|
throw (new \Exception("The project with prj_uid: '', does not exist."));
|
|
|
|
|
}
|
|
|
|
|
$oProcess = new \Process();
|
|
|
|
|
if (!($oProcess->processExists($pro_uid))) {
|
|
|
|
|
throw (new \Exception("The project with prj_uid: '$pro_uid', does not exist."));
|
|
|
|
|
}
|
|
|
|
|
return $pro_uid;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validate DataBase Connection Uid
|
|
|
|
|
* @var string $pro_uid. Uid for process
|
|
|
|
|
* @var string $dbs_uid. Uid for process
|
|
|
|
|
*
|
|
|
|
|
* @author Brayan Pereyra (Cochalo) <brayan@colosa.com>
|
|
|
|
|
* @copyright Colosa - Bolivia
|
|
|
|
|
*
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
public function validateDbsUid ($dbs_uid, $pro_uid) {
|
|
|
|
|
$dbs_uid = trim($dbs_uid);
|
|
|
|
|
if ($dbs_uid == '') {
|
|
|
|
|
throw (new \Exception("The database connection with dbs_uid: '', does not exist."));
|
|
|
|
|
}
|
|
|
|
|
$oDBSource = new DbSource();
|
|
|
|
|
if (!($oDBSource->Exists($dbs_uid, $pro_uid))) {
|
|
|
|
|
throw (new \Exception("The database connection with dbs_uid: '$dbs_uid', does not exist."));
|
|
|
|
|
}
|
|
|
|
|
return $dbs_uid;
|
|
|
|
|
}
|
2014-01-23 11:42:54 -04:00
|
|
|
}
|
|
|
|
|
|