This repository has been archived on 2018-10-12. You can view files and clone it, but cannot push or open issues or pull requests.
OpenSQLManager/sys/widgets/connection_manager.php

161 lines
3.7 KiB
PHP

<?php
/**
* OpenSQLManager
*
* Free Database manager for Open Source Databases
*
* @package OpenSQLManager
* @author Timothy J. Warren
* @copyright Copyright (c) 2012
* @link https://github.com/aviat4ion/OpenSQLManager
* @license http://philsturgeon.co.uk/code/dbad-license
*/
// --------------------------------------------------------------------------
namespace OpenSQLManager;
/**
* Widget for adding / Editing Connections
*
* @package OpenSQLManager
* @subpackage Widgets
*/
class Connection_Manager extends \wxFrame {
const TXT_CONN_NAME = 1;
const COMBO_DB_TYPE = 2;
const FILE_DB_FILE = 3;
const TXT_DB_NAME = 4;
const TXT_DB_HOST = 5;
const TXT_DB_PORT = 6;
const TXT_DB_USER = 7;
const TXT_DB_PASS = 8;
/**
* Array of fields for Connection Information manipulation
*
* @var array
*/
protected $fields = array();
/**
* Create the window
*
* @param wxWindow
* @param mixed
*/
public function __construct($parent, $params = array())
{
parent::__construct($parent, 32, "Connection Manager", wxDefaultPosition, new \wxSize(640, 480));//, wxCAPTION|wxCLOSE_BOX);
// Layout the window
$this->_layout($params);
}
// --------------------------------------------------------------------------
/**
* Layout fields on the form
*
* @param array
*/
protected function _layout($params)
{
// Use a table-like sizer
$sizer = new \wxFlexGridSizer(2, 5, 5);
$sizer->SetFlexibleDirection(wxBOTH);
$sizer->AddGrowableCol(0, 1);
$sizer->AddGrowableCol(1, 1);
$db_types = $this->get_available_dbs();
if ($db_types === FALSE)
{
error("No valid databases set up in PHP");
return;
}
// Create the controls
// label => control
$this->fields = array(
'Connection name' => new \wxTextCtrl($this, self::TXT_CONN_NAME),
'Database Type' => $choice = new \wxChoice(),
'Database File' => new \wxFilePickerCtrl($this, self::FILE_DB_FILE, wxEmptyString, "Select the database file", wxFileSelectorDefaultWildcardStr),
'Database Name' => new \wxTextCtrl($this, self::TXT_DB_NAME),
'Host' => new \wxTextCtrl($this, self::TXT_DB_HOST),
'Port' => new \wxTextCtrl($this, self::TXT_DB_PORT),
'User' => new \wxTextCtrl($this, self::TXT_DB_USER),
'Password' => new \wxTextCtrl($this, self::TXT_DB_PASS)
);
$choice->Create($this, self::COMBO_DB_TYPE, wxDefaultPosition, wxDefaultSize, $db_types);
// Add the controls to the sizer
$i = 1;
foreach ($this->fields as $lbl => $ctrl)
{
$label = new \wxStaticText($this, $i, $lbl);
$sizer->Add($label, 0, wxALIGN_LEFT);
$sizer->Add($ctrl, 1, wxALIGN_RIGHT|wxEXPAND);
$i++;
}
$this->SetSizer($sizer);
$this->Layout();
$this->Center(wxBOTH);
}
// --------------------------------------------------------------------------
/**
* Get the list of available database types
*
* return array
*/
protected function get_available_dbs()
{
$drivers = array();
$pdo_drivers = \pdo_drivers();
// Add PDO drivers
foreach ($pdo_drivers as &$d)
{
// Skip sqlite2 as opposed to sqlite3
if($d === 'sqlite2' && (in_array('sqlite', $pdo_drivers) || in_array('sqlite3', $pdo_drivers)))
{
continue;
}
// Use the ibase_functions over PDO::Firebird, at least for now
if($d === 'firebird')
{
continue;
}
// Replace default capitalization with something that looks better.
$d = str_replace("sql", "SQL", $d);
$d = str_ireplace("pg", "Postgre", $d);
$d = str_ireplace("odbc", "ODBC", $d);
$d = ucfirst($d);
$drivers[] = $d;
}
// Add firebird support, if exists
if(function_exists('fbird_connect') && ! in_array('firebird', $pdo_drivers))
{
$drivers[] = "Firebird";
}
sort($drivers);
return $drivers;
}
}
// End of connection_manager.php