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;
 }
Exemple #4
0
 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()");
 }
Exemple #6
0
 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");
 }
Exemple #7
0
 /**
  * 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();
Exemple #9
0
 /**
  * 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];
     }
 }
Exemple #10
0
 /**
  * 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');