#!/usr/bin/env php isDot()) { copyDirectory("$source$entry", "$target$entry"); } } } // ignore links, not part of phpBB arch } $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; $phpEx = substr(strrchr(__FILE__, '.'), 1); include($phpbb_root_path . 'common.' . $phpEx); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { echo 'This script is intended for unixoid installations.'; exit(1); } $fileowner = fileowner($phpbb_root_path); $filegroup = filegroup($phpbb_root_path); $fileownerName = posix_getpwuid($fileowner)['name']; $filegroupName = posix_getgrgid($filegroup)['name']; if (!empty($argv[1])) { switch ($argv[1]) { case '--prepare': // handle version stuff $sql = "SELECT config_value FROM ${table_prefix}config WHERE config_name = 'version'"; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $installedVersion = $row['config_value']; print("Installed version: $installedVersion" . PHP_EOL); // phpBB has major, minor and maintenance version scheme list($major, $minor, $patch) = explode('.', $installedVersion); if ((intval($major) != 3) || (intval($minor) != 2)) { echo "This script only supports phpBB 3.2 branch.", PHP_EOL; exit(1); } // ok, start update $now = date('d.m.Y H:i'); $disableMsg = "Softwareupdate am $now, das Bord ist kurzzeitig nicht erreichbar."; $sql = "UPDATE ${table_prefix}config SET config_value = '$disableMsg' WHERE config_name = 'board_disable_msg'"; $result = $db->sql_query($sql); echo "Disable Message set …", PHP_EOL; $sql = "UPDATE ${table_prefix}config SET config_value = '1' WHERE config_name = 'board_disable'"; $result = $db->sql_query($sql); echo "Board disabled …", PHP_EOL; // clear cache $data_global_cache = $phpbb_root_path . '/cache/data_global.' . $phpEx; if (file_exists($data_global_cache)) { unlink($data_global_cache); echo "Cache cleared …"; } // http://version.phpbb.com/phpbb/versions.json $json = file_get_contents('http://version.phpbb.com/phpbb/versions.json'); $versions = json_decode($json); $currentVersion = $versions->{'stable'}->{'3.2'}->{'current'}; print("Current version: $currentVersion" . PHP_EOL); // check for existing update if (!file_exists('dist')) { echo "'dist' folder is missing, create a new one …'"; mkdir ('dist'); } $currentFile = "phpBB-$currentVersion-deutsch.tar.bz2"; $filePath = "http://downloads.phpbb.de/pakete/deutsch/3.2/$currentVersion/$currentFile"; $target = "dist/$currentFile"; if (!file_exists($target)) { print("Downloading $currentFile"); $phpBBtbz = file_get_contents($filePath); file_put_contents($target, $phpBBtbz); } else { print("File exists: $currentFile" . PHP_EOL); if (!confirm('Use this copy and continue?')) { echo "Aborted due to user request.", PHP_EOL; exit(1); } } $data = new PharData($target); try { unset($data['phpBB3/config.php']); unset($data['phpBB3/.htaccess']); } catch (Exception $e) { echo 'error: ', $e; } // check for enabled extensions $sql = "SELECT ext_name FROM ${table_prefix}ext WHERE ext_active = '1'"; $result = $db->sql_query($sql); $rows = $db->sql_fetchrowset($result); if (count($rows) > 0) { $rows = json_encode($rows); // safe enabled extensions $ofile = fopen('extensions.txt', 'w'); fputs($ofile, $rows); fclose($ofile); // disable all extensions $sql = "UPDATE ${table_prefix}ext SET ext_active = '0' WHERE ext_active = '1'"; $result = $db->sql_query($sql); } // disable all styles but prosilver $sql = "UPDATE ${table_prefix}styles SET style_active = '0' WHERE NOT style_name = 'prosilver'"; $result = $db->sql_query($sql); // remove all old files $excludes = array( 'config.php', '.htaccess', '.htpasswd', 'images', 'files', 'ext', 'styles', 'store', 'updates', 'mobiquo'); // this will fuck up nearly all modified boards, leave the files alone by default // deleteDirectory($phpbb_root_path, $excludes); try { // $data->extractTo($phpbb_root_path, 'phpBB3'); // does not work due to php bug: // https://bugs.php.net/bug.php?id=54289 $data->extractTo($phpbb_root_path, null, true); $fromDir = $phpbb_root_path . 'phpBB3/'; $toDir = $phpbb_root_path; copyDirectory($fromDir, $toDir); deleteDirectory($fromDir); } catch (Exception $e) { print("Error while extracting $data: $e"); exit(1); } echo 'Moved the update in place.', PHP_EOL; echo 'Check fileowner', PHP_EOL; print("You might need to perform 'chown -R $fileownerName:$filegroupName $phpbb_root_path'" . PHP_EOL); echo 'prepare config.yml.', PHP_EOL; $oFile = fopen($phpbb_root_path . '/install/config.yml', 'w'); fputs($oFile, 'updater:' . PHP_EOL . " type: db_only" . PHP_EOL); fclose($oFile); echo "Now head over to ${phpbb_root_path}install and execute 'php phpbbcli.php update config.yml'", PHP_EOL; echo "After, return here and finish the update by excuting php $argv[0] --finish", PHP_EOL; exit(0); break; case "--finish": if (confirm('Remove the install directory?')) { deleteDirectory($phpbb_root_path . 'install'); } $sql = "UPDATE ${table_prefix}config SET config_value = '0' WHERE config_name = 'board_disable'"; $result = $db->sql_query($sql); echo "Board reenabled …", PHP_EOL; // clear cache $data_global_cache = $phpbb_root_path . '/cache/production/data_global.' . $phpEx; if (file_exists($data_global_cache)) { unlink($data_global_cache); echo "Cache cleared …", PHP_EOL; } echo "Your board should now be up and running, you might want to reeanble the extensions using php $argv[0] --reenable-extensions", PHP_EOL; exit(0); break; case "--reenable-extensions": $extensionsFile = 'extensions.txt'; if (file_exists($extensionsFile)) { $iFile = fopen($extensionsFile, 'r'); $extensions = json_decode(fgets($iFile), true); echo 'Enable extensions: '; foreach($extensions as $extension) { $ext = $extension['ext_name']; // disable all extensions $sql = "UPDATE ${table_prefix}ext SET ext_active = '1' WHERE ext_name = '$ext'"; $result = $db->sql_query($sql); echo '.'; } echo 'done.', PHP_EOL; // clear cache $data_ext_cache = $phpbb_root_path . '/cache/production/data_ext.' . $phpEx; if (file_exists($data_ext_cache)) { unlink($data_ext_cache); echo "Cache cleared …", PHP_EOL; } } else { echo 'There are no saved extension information available.', PHP_EOL; } exit(0); break; default: echo "unknow option $argv[1]", PHP_EOL; exit(1); } } else { echo "$argv[0]: missing parameter", PHP_EOL; echo 'Usage:', PHP_EOL; echo 'To perfom an update, you need two steps. Fist prepare the board for the update:', PHP_EOL; echo "php $argv[0] --prepare", PHP_EOL; echo 'Then perform the DB update with the CLI tool from phpBB, after:', PHP_EOL; echo "php $argv[0] --finish", PHP_EOL; echo "Additional steps:", PHP_EOL; echo "php $argv[0] --reenable-extensions", PHP_EOL; // echo "php $argv[0] --reenable-styles", PHP_EOL; // really? exit(0); }