diff --git a/update.php b/update.php index f513ab6..c6931c7 100755 --- a/update.php +++ b/update.php @@ -1,340 +1,9 @@ -#!/usr/bin/env php +#!/usr/bin/keyhelp-php81 -d apc.enable_cli=1 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) != SUPPORTED_RELEASE_MAJOR) || (intval($minor) != SUPPORTED_RELEASE_MINOR)) { - echo 'This script only supports phpBB ' . SUPPORTED_RELEASE_MAJOR . '.' . SUPPORTED_RELEASE_MINOR . ' 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'}->{SUPPORTED_RELEASE_MAJOR . '.' . SUPPORTED_RELEASE_MINOR}->{'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/' . SUPPORTED_RELEASE_MAJOR . '.' . SUPPORTED_RELEASE_MINOR . "/$currentVersion/$currentFile"; - echo $filePath; - - $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); -} +$update = new UpdateController(); +$update->handleUpdate();