'include', // The config file dir
'cfg_f' => 'include/config.inc.php', // The config file name
'alb_d' => 'albums', // The album dir
'upl_d' => 'userpics', // The uploaded pic dir
);
$superCage = Inspekt::makeSuperCage();
// If including includes/init.inc.php has worked as expected, the constants should be populated, so let's check that first
if (!defined('SKIP_AUTHENTICATION') && defined('COPPERMINE_VERSION') && GALLERY_ADMIN_MODE) {
$_SESSION['auth'] = true;
} else { // we need to populate the language array
require 'lang/english.php';
}
if (!function_exists('cpg_display_help')) {
$help = ' '.cpg_display_help('f=upgrading.htm&as=updater&ae=updater_end&top=1', '650', '500');
} else {
$help = ' ';
}
// --------------------- SELECT NEW DATABASE ACCESS METHOD --------------------- //
// if a different dbase method is selected, we have to change the config and reload
// the page to get to the correct dbase class
if ($superCage->post->keyExists('action') && $superCage->post->getAlpha('action') == 'dbselect') {
set_config_dbtype($superCage->post->getRaw('db_type'));
if ($errors) {
html_error($errors);
} else {
header('Location: update.php?dbswitch=1');
}
exit;
}
if ($superCage->get->keyExists('dbswitch') && $superCage->get->getInt('dbswitch')) {
define('SKIP_AUTHENTICATION', true);
}
// ---------------------------- AUTHENTICATION --------------------------- //
// SKIP_AUTHENTICATION is a constant that can be defined for users who can't retrieve any kind of password
if (!defined('SKIP_AUTHENTICATION') && !$_SESSION['auth']) {
html_header($lang_update_php['title']);
if (!$superCage->post->keyExists('method')) {
//first try to connect to the db to see if we can authenticate the admin
test_sql_connection();
if ($errors != '') {
//we could not establish an sql connection, so update can't be done (and user can't be autenticated)
html_error($errors);
} else {
//echo a box for admin autentication
html_auth_box('admin');
}
} elseif ($superCage->post->getAlpha('method') == 'admin') {
//try to autenticate the admin
test_sql_connection();
$user = $superCage->post->getEscaped('user');
$pass = $superCage->post->getEscaped('pass');
// Check if column 'user_password_salt' exists in user table
$result = cpg_db_query("SELECT * FROM {$CONFIG['TABLE_PREFIX']}users LIMIT 1");
$row = $result->fetchAssoc(true);
$col_user_password_salt_exists = isset($row['user_password_salt']) ? true : false;
if ($col_user_password_salt_exists) {
require 'include/passwordhash.inc.php';
$sql = "SELECT user_password, user_password_salt, user_password_hash_algorithm, user_password_iterations FROM {$CONFIG['TABLE_PREFIX']}users WHERE user_group = 1 AND user_name = '$user'";
$result = cpg_db_query($sql);
$password_params = $result->fetchAssoc(true);
}
if (!$col_user_password_salt_exists || !$password_params['user_password_salt']) {
$sql = "SELECT user_active FROM {$CONFIG['TABLE_PREFIX']}users WHERE user_group = 1 AND user_name = '$user' AND (user_password = '$pass' OR user_password = '".md5($pass)."')";
$result = cpg_db_query($sql);
if (!$result->numRows()) {
//not authenticated, try mysql account details
html_auth_box('MySQL');
die();
}
} elseif (!cpg_password_validate($pass, $password_params)) {
//not authenticated, try mysql account details
html_auth_box('MySQL');
die();
}
//authenticated, do the update
$_SESSION['auth'] = true;
start_update();
} else {
//try to autenticate via MySQL details (in configuration)
if ($superCage->post->getEscaped('user') == $CONFIG['dbuser'] && $superCage->post->getEscaped('pass') == $CONFIG['dbpass']) {
//authenticated, do the update
$_SESSION['auth'] = true;
start_update();
} else {
//no go, try again
html_error($lang_update_php['could_not_authenticate'] . ' - ' . $lang_update_php['try_again'] .'');
}
}
html_footer();
} else {
html_header($lang_update_php['title']);
$_SESSION['auth'] = true;
start_update();
html_footer();
}
// function definitions --- start
// ------------------------- HTML OUTPUT FUNCTIONS ------------------------- //
function html_header($title, $charset = 'iso8859-1')
{
if (function_exists('pageheader') && defined('COPPERMINE_VERSION') && GALLERY_ADMIN_MODE) {
pageheader($title);
} else {
echo <<< EOT
{$title}
EOT;
}
}
function html_error($error_msg = '')
{
global $lang_update_php, $help;
echo <<< EOT
{$lang_update_php['welcome_updater']}{$help}
EOT;
if ($error_msg) {
echo <<< EOT
ERROR
{$lang_update_php['errors_encountered']}:
{$error_msg}
EOT;
}
echo <<< EOT
EOT;
}
function html_install_success($notes)
{
global $DFLT, $lang_update_php;
//Coppermine is now upgraded and ready to roll.
echo ' ';
echo '
EOT;
// Have to relax the sql modes for mysql 5.7 so it won't fail with zero dates, etc.
cpg_db_query("SET SESSION sql_mode = ''");
foreach ($sql_query as $q) {
$cellStyle = ($loopCounter / 2 == floor($loopCounter / 2)) ? 'tableb' : 'tableb tableb_alternate';
$loopCounter++;
echo '
' . $LINEBREAK . '
' . $q;
/**
* Determining if the Alter Table actually made a change
* to properly reflect it's status on the update page.
*/
if (strpos(strtolower($q), 'alter table') !== false) {
$query = explode(' ', $q);
$result = cpg_db_query("DESCRIBE " . $query[2]);
$description = array();
while ($row = $result->fetchRow()) {
$description[] = $row;
}
$result->free();
$result = @cpg_db_query($q);
if (!$result) {
$errno = $CPGDB->getError(true);
if (!in_array($errno, $okerrs)) {
table_complain($cellStyle);
continue;
}
}
$affected = $CPGDB->affectedRows();
$warnings = cpg_db_query('SHOW WARNINGS');
$result = cpg_db_query("DESCRIBE " . $query[2]);
$description2 = array();
while ($row = $result->fetchRow()) {
$description2[] = $row;
}
$result->free();
if ($description == $description2) {
$affected = 0;
}
} else {
$result = @cpg_db_query($q);
if (!$result) {
$errno = $CPGDB->getError(true);
if (!in_array($errno, $okerrs)) {
table_complain($cellStyle);
continue;
}
}
$affected = $CPGDB->affectedRows();
$warnings = cpg_db_query('SHOW WARNINGS;');
}
if ($superCage->get->keyExists('debug')) {
echo 'Debug output: ';
if ($affected > -1) {
echo "Rows Affected: ".$affected.". ";
}
if ($warnings) {
while ($warning = $warnings->fetchRow()) {
if ($warning[0] != '') {
$warning_text = 'MySQL said: ';
} else {
$warning_text = '';
}
echo $warning_text.''.$warning[0]. ' ('.$warning[1].') '.$warning[2].' ';
}
$warnings->free();
}
}
echo '
'.$LINEBREAK; // end the table cell that contains the output
if ($result && $affected) {
echo '
EOT;
// Encrypt the album password but only for those albums which have a password assigned.
$result = cpg_db_query("update {$CONFIG['TABLE_PREFIX']}albums set alb_password=md5(alb_password) WHERE alb_password IS NOT NULL AND alb_password != '';");
if ($CONFIG['enable_encrypted_alb_passwords'] != NULL) {
$result = cpg_db_query("update {$CONFIG['TABLE_PREFIX']}config set value = 1 WHERE name = 'enable_encrypted_alb_passwords'");
} else {
$result = cpg_db_query("INSERT INTO {$CONFIG['TABLE_PREFIX']}config ( `name` , `value` ) VALUES ('enable_encrypted_alb_passwords', '1')");
}
} else {
echo <<< EOT
EOT;
} else {
// Pre-install the core upload plugins
cpg_db_query("INSERT INTO {$CONFIG['TABLE_PREFIX']}plugins (name, path, priority) VALUES ('CoreH5A Upload', 'upload_h5a', 0), ('CoreSWF Upload', 'upload_swf', 1), ('CoreSGL Upload', 'upload_sgl', 2)");
// And set the default mechanism to 'upload_h5a'
cpg_db_query("UPDATE {$CONFIG['TABLE_PREFIX']}config SET value='upload_h5a' WHERE name='upload_mechanism'");
// employ any existing html5upload configurations
$result = cpg_db_query("SELECT name,value FROM {$CONFIG['TABLE_PREFIX']}config WHERE name LIKE 'html5upload_config%'");
$cfgs = cpg_db_fetch_rowset($result, true);
foreach ($cfgs as $cfg) {
$cfgn = 'upload_h5a' . substr($cfg['name'], 18);
$cfgv = cpg_db_escape_string($cfg['value']);
cpg_db_query("INSERT INTO {$CONFIG['TABLE_PREFIX']}config VALUES ('{$cfgn}', '{$cfgv}')");
}
}
// if there were no html5upload configs, set a default one
if (!isset($cfgs) || !$cfgs) {
cpg_db_query("INSERT INTO {$CONFIG['TABLE_PREFIX']}config VALUES ('upload_h5a', 'a:11:{s:10:\"concurrent\";i:3;s:8:\"upldsize\";i:0;s:8:\"autoedit\";i:1;s:8:\"acptmime\";s:7:\"image/*\";s:8:\"enabtitl\";i:0;s:8:\"enabdesc\";i:0;s:8:\"enabkeys\";i:1;s:8:\"enabusr1\";i:0;s:8:\"enabusr2\";i:0;s:8:\"enabusr3\";i:0;s:8:\"enabusr4\";i:0;}')");
}
echo <<< EOT
{$ok_icon}{$lang_common['ok']}
EOT;
}
function table_complain ($cs)
{
global $errors, $CONFIG, $CPGDB, $lang_update_php, $lang_common, $LINEBREAK, $help;
echo '
', $CPGDB->getError(), '
', $LINEBREAK;
}
function update_files()
{
global $lang_update_php, $file_system_icon;
echo <<< EOT