public function removeSourceContainer($dsnArray = null, $username = null, $password = null) { $removed = false; if ($this->xpdo->getConnection(array(xPDO::OPT_CONN_MUTABLE => true))) { if ($dsnArray === null) { $dsnArray = xPDO::parseDSN($this->xpdo->getOption('dsn')); } if (is_array($dsnArray)) { try { $dbfile = $dsnArray['dbname']; if (file_exists($dbfile)) { $removed = unlink($dbfile); if (!$removed) { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not remove source container"); } } else { $removed = true; } } catch (Exception $e) { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not remove source container: " . $e->getMessage()); } } } return $removed; }
public function removeSourceContainer($dsnArray = null, $username = null, $password = null) { $removed = false; if ($this->xpdo->getConnection(array(xPDO::OPT_CONN_MUTABLE => true))) { if ($dsnArray === null) { $dsnArray = xPDO::parseDSN($this->xpdo->getOption('dsn')); } if ($username === null) { $username = $this->xpdo->getOption('username', null, ''); } if ($password === null) { $password = $this->xpdo->getOption('password', null, ''); } if (is_array($dsnArray) && is_string($username) && is_string($password)) { $sql = 'DROP DATABASE ' . $this->xpdo->escape($dsnArray['dbname']); try { $pdo = new PDO("sqlsrv:server={$dsnArray['server']}", $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); $pdo->exec("ALTER DATABASE {$this->xpdo->escape($dsnArray['dbname'])} SET single_user WITH ROLLBACK IMMEDIATE"); $result = $pdo->exec($sql); if ($result !== false) { $removed = true; } else { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not remove source container:\n{$sql}\nresult = " . var_export($result, true)); } } catch (PDOException $pe) { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not connect to database server: " . $pe->getMessage()); } catch (Exception $e) { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not remove source container: " . $e->getMessage()); } } } else { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not get writable connection", '', __METHOD__, __FILE__, __LINE__); } return $removed; }
public function removeSourceContainer($dsnArray = null, $username = null, $password = null) { $removed = false; if ($dsnArray === null) { $dsnArray = xPDO::parseDSN($this->xpdo->getOption('dsn')); } if ($username === null) { $username = $this->xpdo->getOption('username', null, ''); } if ($password === null) { $password = $this->xpdo->getOption('password', null, ''); } if (is_array($dsnArray) && is_string($username) && is_string($password)) { $sql = 'DROP DATABASE ' . $this->xpdo->escape($dsnArray['dbname']); try { $pdo = new PDO("mysql:host={$dsnArray['host']}", $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); $result = $pdo->exec($sql); if ($result !== false) { $removed = true; } else { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not remove source container:\n{$sql}\nresult = " . var_export($result, true)); } } catch (PDOException $pe) { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not connect to database server: " . $pe->getMessage()); } catch (Exception $e) { $this->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Could not remove source container: " . $e->getMessage()); } } return $removed; }
public function testInitialize() { $xpdo = $this->getXPDOObject(); if ($xpdo && $xpdo->connect()) { $response = $xpdo->getManager()->removeSourceContainer(xPDO::parseDSN($this->properties[$this->properties['xpdo_driver'] . '_string_dsn_test'])); if ($response) { $xpdo = null; } } else { $xpdo = null; } $this->assertTrue($xpdo == null, "Test container exists and could not be removed for initialization"); }
/** * Verify drop database works. */ public function testRemoveSourceContainer() { if (!empty(xPDOTestHarness::$debug)) { print "\n" . __METHOD__ . " = "; } $xpdo = xPDOTestHarness::getInstance(true); $success = false; if ($xpdo) { $driver = xPDOTestHarness::$properties['xpdo_driver']; $dsn = xPDOTestHarness::$properties[$driver . '_string_dsn_test']; $dsn = xPDO::parseDSN($dsn); $success = $xpdo->getManager()->removeSourceContainer($dsn); } $this->assertTrue($success, "Test container exists and could not be removed for initialization via xPDOManager->removeSourceContainer()"); }
public function testInitialize() { if (!empty(xPDOTestHarness::$debug)) { print "\n" . __METHOD__ . " = "; } $xpdo = xPDOTestHarness::getInstance(true); if (is_object($xpdo)) { $response = $xpdo->getManager()->removeSourceContainer(xPDO::parseDSN(xPDOTestHarness::$properties[xPDOTestHarness::$properties['xpdo_driver'] . '_string_dsn_test'])); if ($response) { $xpdo = null; } } else { $xpdo = null; } $this->assertTrue($xpdo == null, "Test container exists and could not be removed for initialization"); }
/** * Creates the physical data container represented by a data source * * @todo Refactor this to work on an xPDO instance rather than as a static call. */ public function createSourceContainer($dsn, $username = '', $password = '', $containerOptions = null) { $created = false; if ($dsnArray = xPDO::parseDSN($dsn)) { switch ($dsnArray['dbtype']) { case 'mysql': include_once strtr(realpath(dirname(__FILE__)), '\\', '/') . '/mysql/xpdomanager.class.php'; $created = xPDOManager_mysql::createSourceContainer($dsnArray, $username, $password, $containerOptions); break; case 'sqlite': include_once strtr(realpath(dirname(__FILE__)), '\\', '/') . '/sqlite/xpdomanager.class.php'; $created = xPDOManager_sqlite::createSourceContainer($dsnArray, $username, $password, $containerOptions); break; case 'pgsql': include_once strtr(realpath(dirname(__FILE__)), '\\', '/') . '/pgsql/xpdomanager.class.php'; $created = xPDOManager_pgsql::createSourceContainer($dsnArray, $username, $password, $containerOptions); break; default: break; } } return $created; }
'modUserMessage', 'modUserRole', 'modUserSetting', 'modWorkspace', 'registry.db.modDbRegisterMessage', 'registry.db.modDbRegisterTopic', 'registry.db.modDbRegisterQueue', 'transport.modTransportPackage', 'transport.modTransportProvider', ); $this->xpdo->getManager(); $connected= $this->xpdo->connect(); $created= false; if (!$connected) { $dsnArray= xPDO :: parseDSN($this->xpdo->getOption('dsn')); $containerOptions['charset']= $install->settings->get('database_charset', 'utf8'); $containerOptions['collation']= $install->settings->get('database_collation', 'utf8_general_ci'); $created= $this->xpdo->manager->createSourceContainer($dsnArray, $this->xpdo->config['username'], $this->xpdo->config['password'], $containerOptions); if (!$created) { $results[]= array ('class' => 'failed', 'msg' => '<p class="notok">'.$this->lexicon('db_err_create').'</p>'); } else { $connected= $this->xpdo->connect(); } if ($connected) { $results[]= array ('class' => 'success', 'msg' => '<p class="ok">'.$this->lexicon('db_created').'</p>'); } } if ($connected) { ob_start();
/** * Construct a new xPDOConnection instance. * * @param xPDO $xpdo A reference to a valid xPDO instance to attach to. * @param string $dsn A string representing the DSN connection string. * @param string $username The database username credentials. * @param string $password The database password credentials. * @param array $options An array of xPDO options for the connection. * @param array $driverOptions An array of PDO driver options for the connection. */ public function __construct(xPDO &$xpdo, $dsn, $username = '', $password = '', $options = array(), $driverOptions = array()) { $this->xpdo =& $xpdo; if (is_array($this->xpdo->config)) { $options = array_merge($this->xpdo->config, $options); } if (!isset($options[xPDO::OPT_TABLE_PREFIX])) { $options[xPDO::OPT_TABLE_PREFIX] = ''; } $this->config = array_merge($options, xPDO::parseDSN($dsn)); $this->config['dsn'] = $dsn; $this->config['username'] = $username; $this->config['password'] = $password; $driverOptions = is_array($driverOptions) ? $driverOptions : array(); if (array_key_exists('driverOptions', $this->config) && is_array($this->config['driverOptions'])) { $driverOptions = array_merge($this->config['driverOptions'], $driverOptions); } $this->config['driverOptions'] = $driverOptions; if (array_key_exists(xPDO::OPT_CONN_MUTABLE, $this->config)) { $this->_mutable = (bool) $this->config[xPDO::OPT_CONN_MUTABLE]; } }
/** * The xPDO Constructor. * * This method is used to create a new xPDO object with a connection to a * specific database container. * * @param mixed $dsn A valid DSN connection string. * @param string $username The database username with proper permissions. * @param string $password The password for the database user. * @param array|string $options An array of xPDO options. For compatibility with previous * releases, this can also be a single string representing a prefix to be applied to all * database container (i. e. table) names, to isolate multiple installations or conflicting * table names that might need to coexist in a single database container. It is preferrable to * include the table_prefix option in the array for future compatibility. * @param mixed $driverOptions Driver-specific PDO options. * @return xPDO A unique xPDO instance. */ public function __construct($dsn, $username = '', $password = '', $options = array(), $driverOptions = null) { if (is_string($options)) { $options = array(xPDO::OPT_TABLE_PREFIX => $options); } if (!is_array($options)) { $options = array(xPDO::OPT_TABLE_PREFIX => ''); } if (!isset($options[xPDO::OPT_TABLE_PREFIX])) { $options[xPDO::OPT_TABLE_PREFIX] = ''; } $this->config = array_merge($options, xPDO::parseDSN($dsn)); $this->config['dsn'] = $dsn; $this->config['username'] = $username; $this->config['password'] = $password; $this->config['driverOptions'] = is_array($driverOptions) ? $driverOptions : array(); switch ($this->config['dbtype']) { case 'mysql': $this->_escapeCharOpen = "`"; $this->_escapeCharClose = "`"; break; case 'sqlite': $this->_escapeCharOpen = '"'; $this->_escapeCharClose = '"'; break; default: break; } $this->setPackage('om', XPDO_CORE_PATH, $this->config[xPDO::OPT_TABLE_PREFIX]); if (isset($this->config[xPDO::OPT_BASE_PACKAGES]) && !empty($this->config[xPDO::OPT_BASE_PACKAGES])) { $basePackages = explode(',', $this->config[xPDO::OPT_BASE_PACKAGES]); foreach ($basePackages as $basePackage) { $exploded = explode(':', $basePackage, 2); if ($exploded) { $path = $exploded[1]; $prefix = null; if (strpos($path, ';')) { $details = explode(';', $path); if ($details && count($details) == 2) { $path = $details[0]; $prefix = $details[1]; } } $this->addPackage($exploded[0], $path, $prefix); } } } $this->getDriver(); $this->loadClass('xPDOObject'); $this->loadClass('xPDOSimpleObject'); if (isset($this->config[xPDO::OPT_BASE_CLASSES])) { foreach (array_keys($this->config[xPDO::OPT_BASE_CLASSES]) as $baseClass) { $this->loadClass($baseClass); } } if (isset($this->config[xPDO::OPT_CACHE_PATH])) { $this->cachePath = $this->config[xPDO::OPT_CACHE_PATH]; } }
/** * Create a new MODX Revolution repository. * * @var xPDO $modx * @var modInstall $install * @var modInstallRunner $this * * @package setup */ $results = array(); $classes = array('modAccessAction', 'modAccessActionDom', 'modAccessCategory', 'modAccessContext', 'modAccessElement', 'modAccessMenu', 'modAccessPermission', 'modAccessPolicy', 'modAccessPolicyTemplate', 'modAccessPolicyTemplateGroup', 'modAccessResource', 'modAccessResourceGroup', 'modAccessTemplateVar', 'modAction', 'modActionDom', 'modActionField', 'modActiveUser', 'modCategory', 'modCategoryClosure', 'modChunk', 'modClassMap', 'modContentType', 'modContext', 'modContextResource', 'modContextSetting', 'modDashboard', 'modDashboardWidget', 'modDashboardWidgetPlacement', 'modElementPropertySet', 'modEvent', 'modExtensionPackage', 'modFormCustomizationProfile', 'modFormCustomizationProfileUserGroup', 'modFormCustomizationSet', 'modLexiconEntry', 'modManagerLog', 'modMenu', 'modNamespace', 'modPlugin', 'modPluginEvent', 'modPropertySet', 'modResource', 'modResourceGroup', 'modResourceGroupResource', 'modSession', 'modSnippet', 'modSystemSetting', 'modTemplate', 'modTemplateVar', 'modTemplateVarResource', 'modTemplateVarResourceGroup', 'modTemplateVarTemplate', 'modUser', 'modUserProfile', 'modUserGroup', 'modUserGroupMember', 'modUserGroupRole', 'modUserGroupSetting', 'modUserMessage', 'modUserSetting', 'modWorkspace', 'registry.db.modDbRegisterMessage', 'registry.db.modDbRegisterTopic', 'registry.db.modDbRegisterQueue', 'transport.modTransportPackage', 'transport.modTransportProvider', 'sources.modAccessMediaSource', 'sources.modMediaSource', 'sources.modMediaSourceElement', 'sources.modMediaSourceContext'); $modx->getManager(); $connected = $modx->connect(); $created = false; if (!$connected) { $dsnArray = xPDO::parseDSN($modx->getOption('dsn')); $containerOptions['charset'] = $install->settings->get('database_charset', 'utf8'); $containerOptions['collation'] = $install->settings->get('database_collation', 'utf8_general_ci'); $created = $modx->manager->createSourceContainer($dsnArray, $modx->config['username'], $modx->config['password']); if (!$created) { $results[] = array('class' => 'failed', 'msg' => '<p class="notok">' . $install->lexicon('db_err_create') . '</p>'); } else { $connected = $modx->connect(); } if ($connected) { $results[] = array('class' => 'success', 'msg' => '<p class="ok">' . $install->lexicon('db_created') . '</p>'); } } if ($connected) { ob_start(); $modx->loadClass('modAccess');