setup/processors/database/collation.php
<?php
/*
* This file is part of MODX Revolution.
*
* Copyright (c) MODX, LLC. All Rights Reserved.
*
* For complete copyright and license information, see the COPYRIGHT and LICENSE
* files found in the top-level directory of this distribution.
*/
/**
* @package setup
*/
$settings = $_POST;
$settings['database_charset'] = $settings['database_connection_charset'];
unset($settings['action']);
$install->settings->store($settings);
$mode = $install->settings->get('installmode');
/* if advanced upgrade, get old settings */
if($mode === modInstall::MODE_UPGRADE_REVO_ADVANCED) {
$settings = array_merge($settings, $install->request->getConfig($mode));
}
$data = array();
$errors = array();
/* get an instance of xPDO using the install settings */
$xpdo = $install->getConnection($mode);
$dbExists = false;
if (!is_object($xpdo) || !($xpdo instanceof xPDO)) {
$this->error->failure($install->lexicon('xpdo_err_ins'));
}
$xpdo->setLogTarget(array(
'target' => 'ARRAY'
,'options' => array('var' => & $errors)
));
/* try to get a connection to the actual database */
$dbExists = $xpdo->connect();
if (!$dbExists) {
if ($mode != modInstall::MODE_NEW) {
$this->error->failure($install->lexicon('db_err_connect_upgrade'), $errors);
} elseif ($xpdo->getManager()) {
/* otherwise try to create the database */
$dbExists = $xpdo->manager->createSourceContainer(
array(
'dbname' => $install->settings->get('dbase')
,'host' => $install->settings->get('database_server')
)
,$install->settings->get('database_user')
,$install->settings->get('database_password')
,array(
'charset' => $install->settings->get('database_connection_charset')
,'collation' => $install->settings->get('database_collation')
)
);
if (!$dbExists) {
$this->error->failure($install->lexicon('db_err_create_database'), $errors);
} else {
$xpdo = $install->getConnection($mode);
if (!is_object($xpdo) || !($xpdo instanceof xPDO)) {
$this->error->failure($install->lexicon('xpdo_err_ins'), $errors);
}
$xpdo->setLogTarget(array(
'target' => 'ARRAY'
,'options' => array('var' => & $errors)
));
}
} else {
$this->error->failure($install->lexicon('db_err_connect_server'), $errors);
}
}
if (!$xpdo->connect()) {
$this->error->failure($install->lexicon('db_err_connect'), $errors);
}
/* test table prefix */
$count = null;
$database = $install->settings->get('dbase');
$prefix = $install->settings->get('table_prefix');
$stmt = $xpdo->query($install->driver->testTablePrefix($database,$prefix));
if ($stmt) {
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
$count = (integer) $row['ct'];
}
$stmt->closeCursor();
}
if ($mode == modInstall::MODE_NEW && $count !== null) {
$this->error->failure($install->lexicon('test_table_prefix_inuse'), $errors);
} elseif (($mode == modInstall::MODE_UPGRADE_REVO || $mode == modInstall::MODE_UPGRADE_REVO_ADVANCED) && $count === null) {
$this->error->failure($install->lexicon('test_table_prefix_nf'), $errors);
}
$this->error->success($install->lexicon('db_success'), $data);