These functions allow you to access MS SQL Server database. This extension is not available anymore on Windows with PHP 5.3 or later. SQLSRV, an alternative extension for MS SQL connectivity is available from Microsoft: » http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx. Alternatively to use the mssql functions in Windows, use php_dblib.dll (FreeTDS) http://www.freetds.org/ e.g. php.ini setting extension=php_dblib.dll php_dblib.dll (FreeTDS) use ':' as the delimiter in all installations.
463 lines
15 KiB
PHP
Executable File
463 lines
15 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Author: Erik Amaru Ortiz <erik@colosa.com>
|
|
* Description:This is a class for load all additional connections; if exist in a particular proccess
|
|
* Date: 15-05-2008
|
|
*
|
|
*
|
|
* class.dbConnections.php
|
|
*
|
|
* Email bugs/suggestions to erik@colosa.com
|
|
*/
|
|
|
|
require_once 'model/DbSource.php';
|
|
require_once 'model/Content.php';
|
|
|
|
/**
|
|
* dbConnections
|
|
*
|
|
*
|
|
* @copyright 2008 Colosa
|
|
* @package workflow.engine.classes
|
|
*
|
|
*/
|
|
class dbConnections
|
|
{
|
|
private $PRO_UID;
|
|
public $connections;
|
|
private $types;
|
|
|
|
/*errors handle*/
|
|
private $errno;
|
|
private $errstr;
|
|
|
|
private $encodesList;
|
|
|
|
/**
|
|
* construct of dbConnections
|
|
*
|
|
* @param string $pPRO_UID
|
|
* @return void
|
|
*/
|
|
public function __construct ($pPRO_UID = null)
|
|
{
|
|
$this->errno = 0;
|
|
$this->errstr = "";
|
|
$this->PRO_UID = $pPRO_UID;
|
|
|
|
$this->getAllConnections();
|
|
}
|
|
|
|
/**
|
|
* getAllConnections
|
|
*
|
|
* @return Array $connections
|
|
*/
|
|
public function getAllConnections ()
|
|
{
|
|
if (isset( $this->PRO_UID )) {
|
|
$oDBSource = new DbSource();
|
|
$oContent = new Content();
|
|
$connections = Array ();
|
|
$types = Array ();
|
|
$this->have_any_connectios = false;
|
|
|
|
$c = new Criteria();
|
|
|
|
$c->clearSelectColumns();
|
|
$c->addSelectColumn( DbSourcePeer::DBS_UID );
|
|
$c->addSelectColumn( DbSourcePeer::PRO_UID );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_TYPE );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_SERVER );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_DATABASE_NAME );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_USERNAME );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_PASSWORD );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_PORT );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_ENCODE );
|
|
$c->addSelectColumn(DbSourcePeer::DBS_CONNECTION_TYPE);
|
|
$c->addSelectColumn(DbSourcePeer::DBS_TNS);
|
|
$c->addSelectColumn( ContentPeer::CON_VALUE );
|
|
|
|
$c->add( DbSourcePeer::PRO_UID, $this->PRO_UID );
|
|
$c->add( ContentPeer::CON_CATEGORY, 'DBS_DESCRIPTION' );
|
|
$c->addJoin( DbSourcePeer::DBS_UID, ContentPeer::CON_ID );
|
|
|
|
$result = DbSourcePeer::doSelectRS( $c );
|
|
$result->next();
|
|
$row = $result->getRow();
|
|
|
|
while ($row = $result->getRow()) {
|
|
$connections[] = array (
|
|
"DBS_UID" => $row[0],
|
|
"DBS_TYPE" => $row[2],
|
|
"DBS_SERVER" => $row[3],
|
|
"DBS_DATABASE_NAME" => $row[4],
|
|
"DBS_USERNAME" => $row[5],
|
|
"DBS_PASSWORD" => $row[6],
|
|
"DBS_PORT" => $row[7],
|
|
"DBS_ENCODE" => $row[8],
|
|
"DBS_CONNECTION_TYPE" => $row[9],
|
|
"DBS_TNS" => $row[10],
|
|
"CON_VALUE" => $row[11]
|
|
);
|
|
|
|
$result->next();
|
|
}
|
|
if (! in_array( $row[2], $types )) {
|
|
$types[] = $row[2];
|
|
}
|
|
$this->connections = $connections;
|
|
return $connections;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* getConnections
|
|
*
|
|
* @param string $pType
|
|
* @return Array $connections
|
|
*/
|
|
public function getConnections ($pType)
|
|
{
|
|
$connections = Array ();
|
|
foreach ($this->connections as $c) {
|
|
if (trim( $pType ) == trim( $c['DBS_TYPE'] )) {
|
|
$connections[] = $c;
|
|
}
|
|
}
|
|
if (count( $connections ) > 0) {
|
|
return $connections;
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* getConnectionsProUid
|
|
*
|
|
* Parameter $only list of items displayed, everything else is ignored.
|
|
*
|
|
* @param string $pProUid
|
|
* @param string $only
|
|
* @return Array $connections
|
|
*/
|
|
public function getConnectionsProUid ($pProUid, $only = array())
|
|
{
|
|
$connections = Array ();
|
|
$c = new Criteria();
|
|
$c->clearSelectColumns();
|
|
|
|
$c->addSelectColumn( DbSourcePeer::DBS_UID );
|
|
$c->addSelectColumn( DbSourcePeer::PRO_UID );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_TYPE );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_SERVER );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_DATABASE_NAME );
|
|
|
|
$result = DbSourcePeer::doSelectRS( $c );
|
|
$result->next();
|
|
$row = $result->getRow();
|
|
|
|
$sw = count($only) > 0;
|
|
while ($row = $result->getRow()) {
|
|
if ((trim( $pProUid ) == trim( $row[1] )) && ( $sw ? in_array($row[2], $only) : true )) {
|
|
$connections[] = Array ('DBS_UID' => $row[0],'DBS_NAME' => '[' . $row[3] . '] ' . $row[2] . ': ' . $row[4]
|
|
);
|
|
}
|
|
$result->next();
|
|
}
|
|
|
|
if (count( $connections ) > 0) {
|
|
return $connections;
|
|
} else {
|
|
return Array ();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* loadAdditionalConnections
|
|
*
|
|
* @return void
|
|
*/
|
|
public function loadAdditionalConnections ()
|
|
{
|
|
PROPEL::Init( PATH_METHODS . 'dbConnections/genericDbConnections.php' );
|
|
}
|
|
|
|
/**
|
|
* getDbServicesAvailables
|
|
*
|
|
* @return array $servicesAvailables
|
|
*/
|
|
public function getDbServicesAvailables ()
|
|
{
|
|
$servicesAvailables = Array ();
|
|
|
|
$dbServices = Array ('mysql' => Array ('id' => 'mysql','command' => 'mysql_connect','name' => 'MySql'
|
|
),'pgsql' => Array ('id' => 'pgsql','command' => 'pg_connect','name' => 'PostgreSql'
|
|
),'mssql' => Array ('id' => 'mssql','command' => 'mssql_connect','name' => 'Microsoft SQL Server'
|
|
),'oracle' => Array ('id' => 'oracle','command' => 'oci_connect','name' => 'Oracle'
|
|
)
|
|
);
|
|
/*,
|
|
'informix'=> Array(
|
|
'id' => 'informix',
|
|
'command' => 'ifx_connect',
|
|
'name' => 'Informix'
|
|
),
|
|
'sqlite' => Array(
|
|
'id' => 'sqlite',
|
|
'command' => 'sqlite_open',
|
|
'name' => 'SQLite'
|
|
)
|
|
*/
|
|
|
|
foreach ($dbServices as $service) {
|
|
if (@function_exists( $service['command'] )) {
|
|
$servicesAvailables[] = $service;
|
|
}
|
|
}
|
|
return $servicesAvailables;
|
|
}
|
|
|
|
/**
|
|
* showMsg
|
|
*
|
|
* @return void
|
|
*/
|
|
public function showMsg ()
|
|
{
|
|
if ($this->errno != 0) {
|
|
$msg = "
|
|
<center>
|
|
<fieldset style='width:90%'><legend>Class NET</legend>
|
|
<div align=left>
|
|
<font color='red'>
|
|
<b>NET::ERROR NO -> $this->errno<br/>
|
|
NET::ERROR MSG -> $this->errstr</b>
|
|
</font>
|
|
</div>
|
|
</fieldset>
|
|
<center>";
|
|
print ($msg) ;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* getEncondeList
|
|
*
|
|
* @param string $engine
|
|
* @return $this->ordx($this->encodesList);
|
|
*/
|
|
public function getEncondeList ($engine = '')
|
|
{
|
|
switch ($engine) {
|
|
default:
|
|
case 'mysql':
|
|
$encodes = Array (Array ('big5','big5 - Big5 Traditional Chinese'
|
|
),Array ('dec8','dec8 - DEC West European'
|
|
),Array ('cp850','cp850 - DOS West European'
|
|
),Array ('hp8','hp8 - HP West European'
|
|
),Array ('koi8r','koi8r - KOI8-R Relcom Russian'
|
|
),Array ('latin1','latin1 - cp1252 West European'
|
|
),Array ('latin2','latin2 - ISO 8859-2 Central European'
|
|
),Array ('swe7','swe7 - 7bit Swedish'
|
|
),Array ('ascii','ascii - US ASCII'
|
|
),Array ('ujis','ujis - EUC-JP Japanese'
|
|
),Array ('sjis','sjis - Shift-JIS Japanese'
|
|
),Array ('hebrew','hebrew - ISO 8859-8 Hebrew'
|
|
),Array ('tis620','tis620 - TIS620 Thai'
|
|
),Array ('euckr','euckr - EUC-KR Korean'
|
|
),Array ('koi8u','koi8u - KOI8-U Ukrainian'
|
|
),Array ('gb2312','gb2312 - GB2312 Simplified Chinese'
|
|
),Array ('greek','greek - ISO 8859-7 Greek'
|
|
),Array ('cp1250','cp1250 - Windows Central European'
|
|
),Array ('gbk','gbk - GBK Simplified Chinese'
|
|
),Array ('latin5','latin5 - ISO 8859-9 Turkish'
|
|
),Array ('armscii8','armscii8 - ARMSCII-8 Armenian'
|
|
),Array ('utf8','utf8 - UTF-8 Unicode'
|
|
),Array ('ucs2','ucs2 - UCS-2 Unicode'
|
|
),Array ('cp866','cp866 - DOS Russian'
|
|
),Array ('keybcs2','keybcs2 - DOS Kamenicky Czech-Slovak'
|
|
),Array ('macce','macce - Mac Central European'
|
|
),Array ('macroman','macroman - Mac West European'
|
|
),Array ('cp852','cp852 - DOS Central European'
|
|
),Array ('latin7','atin7 - ISO 8859-13 Baltic'
|
|
),Array ('cp1251','cp1251 - Windows Cyrillic'
|
|
),Array ('cp1256','cp1256 - Windows Arabic'
|
|
),Array ('cp1257','cp1257 - Windows Baltic'
|
|
),Array ('binary','binary - Binary pseudo charset'
|
|
),Array ('geostd8','geostd8 - GEOSTD8 Georgian'
|
|
),Array ('cp932','cp932] - SJIS for Windows Japanese'
|
|
),Array ('eucjpms','eucjpms - UJIS for Windows Japanese'
|
|
)
|
|
);
|
|
|
|
break;
|
|
case 'pgsql':
|
|
$encodes = Array (Array ("BIG5","BIG5"
|
|
),Array ("EUC_CN","EUC_CN"
|
|
),Array ("EUC_JP","EUC_JP"
|
|
),Array ("EUC_KR","EUC_KR"
|
|
),Array ("EUC_TW","EUC_TW"
|
|
),Array ("GB18030","GB18030"
|
|
),Array ("GBK","GBK"
|
|
),Array ("ISO_8859_5","ISO_8859_5"
|
|
),Array ("ISO_8859_6","ISO_8859_6"
|
|
),Array ("ISO_8859_7","ISO_8859_7"
|
|
),Array ("ISO_8859_8","ISO_8859_8"
|
|
),Array ("JOHAB","JOHAB"
|
|
),Array ("KOI8","KOI8"
|
|
),Array ("selected","LATIN1"
|
|
),Array ("LATIN2","LATIN2"
|
|
),Array ("LATIN3","LATIN3"
|
|
),Array ("LATIN4","LATIN4"
|
|
),Array ("LATIN5","LATIN5"
|
|
),Array ("LATIN6","LATIN6"
|
|
),Array ("LATIN7","LATIN7"
|
|
),Array ("LATIN8","LATIN8"
|
|
),Array ("LATIN9","LATIN9"
|
|
),Array ("LATIN10","LATIN10"
|
|
),Array ("SJIS","SJIS"
|
|
),Array ("SQL_ASCII","SQL_ASCII"
|
|
),Array ("UHC","UHC"
|
|
),Array ("UTF8","UTF8"
|
|
),Array ("WIN866","WIN866"
|
|
),Array ("WIN874","WIN874"
|
|
),Array ("WIN1250","WIN1250"
|
|
),Array ("WIN1251","WIN1251"
|
|
),Array ("WIN1252","WIN1252"
|
|
),Array ("WIN1256","WIN1256"
|
|
),Array ("WIN1258","WIN1258"
|
|
)
|
|
);
|
|
break;
|
|
case 'mssql':
|
|
$encodes = Array (Array ('utf8','utf8 - UTF-8 Unicode'
|
|
)
|
|
);
|
|
break;
|
|
case 'oracle':
|
|
$encodes = array (
|
|
array ("UTF8", "UTF8 - Unicode 3.0 UTF-8 Universal character set CESU-8 compliant"),
|
|
array ("UTFE", "UTFE - EBCDIC form of Unicode 3.0 UTF-8 Universal character set"),
|
|
array ("AL16UTF16", "AL16UTF16 - Unicode 3.1 UTF-16 Universal character set"),
|
|
array ("AL32UTF8", "AL32UTF8 - Unicode 3.1 UTF-8 Universal character set")
|
|
);
|
|
break;
|
|
}
|
|
|
|
$this->encodesList = $encodes;
|
|
return $this->ordx( $this->encodesList );
|
|
}
|
|
|
|
/**
|
|
* getErrno
|
|
*
|
|
* @return integer $errno
|
|
*/
|
|
public function getErrno ()
|
|
{
|
|
return $this->errno;
|
|
}
|
|
|
|
/**
|
|
* getErrmsg
|
|
*
|
|
* @return string errstr
|
|
*/
|
|
public function getErrmsg ()
|
|
{
|
|
return $this->errstr;
|
|
}
|
|
|
|
/**
|
|
* getErrmsg
|
|
*
|
|
* @param array $m
|
|
* @return array $aRet
|
|
*/
|
|
public function ordx ($m)
|
|
{
|
|
$aTmp = Array ();
|
|
$aRet = Array ();
|
|
for ($i = 0; $i < count( $m ); $i ++) {
|
|
array_push( $aTmp, $m[$i][0] . '|' . $m[$i][1] );
|
|
}
|
|
usort( $aTmp, "strnatcasecmp" );
|
|
|
|
for ($i = 0; $i < count( $aTmp ); $i ++) {
|
|
$x = explode( '|', $aTmp[$i] );
|
|
array_push( $aRet, Array ($x[0],$x[1]
|
|
) );
|
|
}
|
|
return $aRet;
|
|
}
|
|
|
|
/**
|
|
* Function encryptThepassw
|
|
*
|
|
* @author krlos Pacha C. <carlos@colosa.com>
|
|
* @access public
|
|
* @param string proUid
|
|
* @return void
|
|
*/
|
|
public function encryptThepassw ($proUid)
|
|
{
|
|
$oDBSource = new DbSource();
|
|
|
|
$c = new Criteria();
|
|
$c->clearSelectColumns();
|
|
$c->addSelectColumn( DbSourcePeer::DBS_UID );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_DATABASE_NAME );
|
|
$c->addSelectColumn( DbSourcePeer::DBS_PASSWORD );
|
|
$c->add( DbSourcePeer::PRO_UID, $proUid );
|
|
$result = DbSourcePeer::doSelectRS( $c );
|
|
$result->next();
|
|
$row = $result->getRow();
|
|
while ($row = $result->getRow()) {
|
|
if ($row[2] != '') {
|
|
$aPass = explode( '_', $row[2] );
|
|
if (count( $aPass ) == 1) {
|
|
$passEncrypt = G::encrypt( $row[2], $row[1] );
|
|
$passEncrypt .= "_2NnV3ujj3w";
|
|
$c2 = new Criteria( 'workflow' );
|
|
$c2->add( DbSourcePeer::DBS_PASSWORD, $passEncrypt );
|
|
$c3 = new Criteria( 'workflow' );
|
|
$c3->add( DbSourcePeer::DBS_UID, $row[0] );
|
|
BasePeer::doUpdate( $c3, $c2, Propel::getConnection( 'workflow' ) );
|
|
}
|
|
}
|
|
$result->next();
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/**
|
|
* Function getPassWithoutEncrypt
|
|
*
|
|
* @author krlos Pacha C. <carlos@colosa.com>
|
|
* @access public
|
|
* @param string passw
|
|
* @return string
|
|
*/
|
|
public function getPassWithoutEncrypt ($aInfoCon)
|
|
{
|
|
$passw = '';
|
|
if ($aInfoCon['DBS_PASSWORD'] != '') {
|
|
$aPassw = explode( '_', $aInfoCon['DBS_PASSWORD'] );
|
|
$passw = $aPassw[0];
|
|
|
|
$flagTns = ($aInfoCon["DBS_TYPE"] == "oracle" && $aInfoCon["DBS_CONNECTION_TYPE"] == "TNS")? 1 : 0;
|
|
|
|
if (sizeof($aPassw) > 1 && $flagTns == 0) {
|
|
$passw = ($passw == "none")? "" : G::decrypt($passw, $aInfoCon["DBS_DATABASE_NAME"]);
|
|
} else {
|
|
$passw = ($passw == "none")? "" : G::decrypt($passw, $aInfoCon["DBS_TNS"]);
|
|
}
|
|
}
|
|
return $passw;
|
|
}
|
|
}
|