mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-19 01:55:13 +00:00
refactor some smelly code
This commit is contained in:
parent
eb58145a2e
commit
61d8911f12
9 changed files with 28 additions and 491 deletions
|
@ -95,8 +95,8 @@ class Cron_daily
|
|||
Run::Summon([ 'Expire' ]);
|
||||
|
||||
remove_obsolete_hublocs();
|
||||
|
||||
Hook::call('cron_daily', datetime_convert());
|
||||
$data = datetime_convert();
|
||||
Hook::call('cron_daily', $data);
|
||||
|
||||
set_config('system', 'last_expire_day', intval(datetime_convert('UTC', 'UTC', 'now', 'd')));
|
||||
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
namespace Code\Lib;
|
||||
|
||||
use App;
|
||||
use Code\Lib\Features;
|
||||
use Code\Extend\Hook;
|
||||
use Code\Render\Theme;
|
||||
|
||||
|
||||
/**
|
||||
* A thread item
|
||||
*/
|
||||
|
@ -99,14 +99,10 @@ class ThreadItem
|
|||
|
||||
$item = $this->get_data();
|
||||
|
||||
$commentww = '';
|
||||
$sparkle = '';
|
||||
$buttons = '';
|
||||
$dropping = false;
|
||||
$star = false;
|
||||
$isstarred = "unstarred fa-star-o";
|
||||
$is_comment = false;
|
||||
$is_item = false;
|
||||
$osparkle = '';
|
||||
$total_children = $this->count_descendants();
|
||||
$unseen_comments = ((isset($item['real_uid']) && $item['real_uid']) ? 0 : $this->count_unseen_descendants());
|
||||
|
@ -525,9 +521,7 @@ class ThreadItem
|
|||
// place to store all the author addresses (links if not available) in the thread so we can auto-mention them in JS.
|
||||
$result['authors'] = [];
|
||||
// fix to add in sub-replies if replying to a comment on your own post from the top level.
|
||||
if ($observer && ($profile_addr === $observer['xchan_hash'] || $profile_addr === $observer['xchan_addr'])) {
|
||||
// ignore it
|
||||
} else {
|
||||
if (!($observer && ($profile_addr === $observer['xchan_hash'] || $profile_addr === $observer['xchan_addr']))) {
|
||||
$result['authors'][] = $profile_addr;
|
||||
}
|
||||
|
||||
|
@ -787,7 +781,6 @@ class ThreadItem
|
|||
public function get_data_value($name)
|
||||
{
|
||||
if (!isset($this->data[$name])) {
|
||||
// logger('[ERROR] Item::get_data_value : Item has no value name "'. $name .'".', LOGGER_DEBUG);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -921,7 +914,7 @@ class ThreadItem
|
|||
// logger('Commentable conv: ' . $conv->is_commentable());
|
||||
|
||||
if (! $this->is_commentable()) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
$template = Theme::get_template($this->get_comment_box_template());
|
||||
|
@ -1037,17 +1030,17 @@ class ThreadItem
|
|||
foreach ($items as $child) {
|
||||
if ($child['author']['abook_id'] && (! intval($child['author']['abook_self']))) {
|
||||
return [
|
||||
'url' => chanlink_hash($child['author']['xchan_hash']),
|
||||
'url' => chanlink_hash($child['author']['xchan_hash']),
|
||||
'photo' => $child['author']['xchan_photo_m'],
|
||||
'name' => $child['author']['xchan_name'],
|
||||
'addr' => $child['author']['xchan_addr'],
|
||||
'name' => $child['author']['xchan_name'],
|
||||
'addr' => $child['author']['xchan_addr'],
|
||||
'censored' => (($child['author']['xchan_censored'] || $child['author']['abook_censor']) ? true : false)
|
||||
];
|
||||
if ($child['children']) {
|
||||
$ret = $this->find_a_friend($child['children']);
|
||||
if ($ret) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($child['children']) {
|
||||
$ret = $this->find_a_friend($child['children']);
|
||||
if ($ret) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ class Url {
|
|||
$instance_headers = ((array_key_exists('headers', $opts) && is_array($opts['headers'])) ? $opts['headers'] : []);
|
||||
|
||||
if (x($opts, 'session')) {
|
||||
if (strpos($url, z_root()) === 0) {
|
||||
if (str_starts_with($url, z_root())) {
|
||||
$instance_headers[] = 'Cookie: PHPSESSID=' . session_id();
|
||||
}
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ class Url {
|
|||
}
|
||||
}
|
||||
|
||||
// don't let curl abort the entire application'
|
||||
// don't let curl abort the entire application
|
||||
// if it throws any errors.
|
||||
|
||||
$s = curl_exec($ch);
|
||||
|
@ -198,7 +198,7 @@ class Url {
|
|||
$matches = [];
|
||||
preg_match('/(Location:|URI:)(.*?)\n/i', $header, $matches);
|
||||
$newurl = trim(array_pop($matches));
|
||||
if (strpos($newurl, '/') === 0) {
|
||||
if (str_starts_with($newurl, '/')) {
|
||||
// We received a redirect to a relative path.
|
||||
// Find the base component of the original url and re-assemble it with the new location
|
||||
$base = @parse_url($url);
|
||||
|
@ -303,7 +303,7 @@ class Url {
|
|||
$instance_headers = ((array_key_exists('headers', $opts) && is_array($opts['headers'])) ? $opts['headers'] : []);
|
||||
|
||||
if (x($opts, 'session')) {
|
||||
if (strpos($url, z_root()) === 0) {
|
||||
if (str_starts_with($url, z_root())) {
|
||||
$instance_headers[] = 'Cookie: PHPSESSID=' . session_id();
|
||||
}
|
||||
}
|
||||
|
@ -407,7 +407,7 @@ class Url {
|
|||
$matches = [];
|
||||
preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
|
||||
$newurl = trim(array_pop($matches));
|
||||
if (strpos($newurl, '/') === 0) {
|
||||
if (str_starts_with($newurl, '/')) {
|
||||
// We received a redirect to a relative path.
|
||||
// Find the base component of the original url and re-assemble it with the new location
|
||||
$base = @parse_url($url);
|
||||
|
|
|
@ -70,8 +70,8 @@ class Editpost extends Controller
|
|||
$catsenabled = ((Apps::system_app_installed($owner_uid, 'Categories')) ? 'categories' : '');
|
||||
|
||||
// we have a single item, but fetch_post_tags expects an array. Convert it before and after.
|
||||
|
||||
$item = array_shift(fetch_post_tags([$item]));
|
||||
$arr = fetch_post_tags([$item]);
|
||||
$item = array_shift($arr);
|
||||
|
||||
if ($catsenabled) {
|
||||
$cats = get_terms_oftype($item['term'], TERM_CATEGORY);
|
||||
|
|
|
@ -52,7 +52,8 @@ class Embedphotos extends Controller
|
|||
if (!$href) {
|
||||
json_return_and_die(array('errormsg' => 'Error retrieving link ' . $href, 'status' => false));
|
||||
}
|
||||
$resource_id = array_pop(explode("/", $href));
|
||||
$tmp = explode('/', $href);
|
||||
$resource_id = array_pop($tmp);
|
||||
|
||||
$x = self::photolink($resource_id, $channel_id);
|
||||
if ($x) {
|
||||
|
|
|
@ -116,7 +116,6 @@ function z_mime_content_type($filename)
|
|||
'odf' => 'application/vnd.oasis.opendocument.formula',
|
||||
'odi' => 'application/vnd.oasis.opendocument.image',
|
||||
'odm' => 'application/vnd.oasis.opendocument.text-master',
|
||||
'odb' => 'application/vnd.oasis.opendocument.base',
|
||||
'odb' => 'application/vnd.oasis.opendocument.database',
|
||||
'ott' => 'application/vnd.oasis.opendocument.text-template',
|
||||
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
|
||||
|
@ -2349,19 +2348,11 @@ function get_dirpath_by_cloudpath($channel, $path)
|
|||
$h['path'] = substr($h['path'], 1);
|
||||
}
|
||||
$folders = explode('/', $h['path']);
|
||||
$f = array_shift($folders);
|
||||
|
||||
$nick = $channel['channel_address'];
|
||||
//check to see if the absolute path was provided (/cloud/channelname/path/to/folder)
|
||||
if ($f === 'cloud') {
|
||||
$g = array_shift($folders);
|
||||
if ($g !== $nick) {
|
||||
// if nick does not follow "cloud", then the top level folder must be called "cloud"
|
||||
// and the given path must be relative to "/cloud/channelname/".
|
||||
$folders = array_unshift(array_unshift($folders, $g), $f);
|
||||
}
|
||||
} else {
|
||||
array_unshift($folders, $f);
|
||||
|
||||
if (count($folders) > 1 && $folders[0] === 'cloud' && $folders[1] === $nick) {
|
||||
array_shift($folders);
|
||||
array_shift($folders);
|
||||
}
|
||||
$clouddir = 'store/' . $nick . '/' ;
|
||||
$subdir = '/';
|
||||
|
|
|
@ -1,394 +0,0 @@
|
|||
<?php
|
||||
|
||||
function ask_question($menu, $options, $default)
|
||||
{
|
||||
$r = null;
|
||||
while (!$r) {
|
||||
echo $menu;
|
||||
$str = substr(strtolower(fgets(STDIN)), 0, -1);
|
||||
if ($str == '') {
|
||||
$r = $default;
|
||||
} elseif (in_array($str, $options)) {
|
||||
$r = $str;
|
||||
}
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
function get_data($prompt, $regex)
|
||||
{
|
||||
do {
|
||||
echo $prompt;
|
||||
$r = substr(fgets(STDIN), 0, -1);
|
||||
if (!preg_match($regex, $prompt)) {
|
||||
$r = '';
|
||||
}
|
||||
} while ($r === '');
|
||||
return $r;
|
||||
}
|
||||
|
||||
function parse_htconfig($file)
|
||||
{
|
||||
if (!file_exists($file)) {
|
||||
return [];
|
||||
}
|
||||
$conf = file_get_contents($file);
|
||||
preg_match_all('/\$db\_(host|port|user|pass|data|type)\s*=\s*\'([[:print:]]+)\'/', $conf, $matches);
|
||||
return array_combine($matches[1], $matches[2]);
|
||||
}
|
||||
|
||||
function get_configtype(array $data)
|
||||
{
|
||||
if (!isset($data['host'], $data['user'], $data['pass'], $data['data'])) {
|
||||
return 'none';
|
||||
}
|
||||
if (@$data['type'] == 1) {
|
||||
return 'pgsql';
|
||||
}
|
||||
return 'mysql';
|
||||
}
|
||||
|
||||
function phpquote($str)
|
||||
{
|
||||
for ($r = '', $x = 0, $l = strlen($str); $x < $l; $x++) {
|
||||
if ($str{$x} == '\'' || $str{$x} == '\\') {
|
||||
$r .= '\\' . $str{$x};
|
||||
} else {
|
||||
$r .= $str{$x};
|
||||
}
|
||||
}
|
||||
return $r;
|
||||
}
|
||||
|
||||
function run_sql($file, $db, &$err, &$n)
|
||||
{
|
||||
$sql = file_get_contents($file);
|
||||
$sql = explode(';', $sql);
|
||||
$err = 0;
|
||||
$n = 0;
|
||||
$c = count($sql);
|
||||
if (!$c) {
|
||||
echo "Unknown error.\n";
|
||||
exit();
|
||||
}
|
||||
foreach ($sql as $stmt) {
|
||||
if ($stmt == '' || $stmt == "\n" || $stmt == "\n\n") {
|
||||
$c--;
|
||||
continue;
|
||||
}
|
||||
$r = $db->exec($stmt);
|
||||
if ($r === false) {
|
||||
echo "\nError executing $stmt: " . var_export($db->errorInfo(), true) . "\n";
|
||||
$err++;
|
||||
} else {
|
||||
$n++;
|
||||
}
|
||||
if ($n % 5 == 0) {
|
||||
echo "\033[255DExecuting: $file, $n/$c\033[K";
|
||||
}
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
$drivers = true;
|
||||
if (!class_exists('PDO')) {
|
||||
$drivers = false;
|
||||
}
|
||||
if ($drivers) {
|
||||
$drivers = PDO::getAvailableDrivers();
|
||||
if (!in_array('pgsql', $drivers) || !in_array('mysql', $drivers)) {
|
||||
$drivers = false;
|
||||
}
|
||||
}
|
||||
if (!$drivers) {
|
||||
echo "Sorry. This migration tool requires both mysql and pgsql PDO drivers.\n";
|
||||
$r = ask_question("If you are on dreamhost you can enable them. This might work on other shared hosts too. Type 'n' to do it yourself.\nWould you like to try (Y/n)? ", array('y', 'n'), 'y');
|
||||
if ($r == 'y') {
|
||||
$path = $_SERVER['HOME'] . '/.php/5.4';
|
||||
if (!file_exists($path)) {
|
||||
mkdir($path, 0770, true);
|
||||
}
|
||||
|
||||
$rcfile = $path . '/phprc';
|
||||
|
||||
$str = '';
|
||||
$mods = get_loaded_extensions();
|
||||
foreach (array('pdo_mysql','pdo_pgsql','pgsql') as $ext) {
|
||||
if (!in_array($ext, $mods)) {
|
||||
$str .= 'extension=' . $ext . ".so\n";
|
||||
}
|
||||
}
|
||||
|
||||
file_put_contents($rcfile, $str, FILE_APPEND);
|
||||
echo "drivers enabled.\nNow type: \033[1m/usr/local/bin/php-5.4 install/" . basename($argv[0]) . "\033[0m\n";
|
||||
}
|
||||
exit();
|
||||
}
|
||||
|
||||
foreach (array('install','include','mod','view') as $dir) {
|
||||
if (!file_exists($dir)) {
|
||||
echo "You must execute from inside the webroot like the cron\n";
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
$cfgfile = '.htconfig.php';
|
||||
if ($argc >= 2 && $argv[1] == '--resume') {
|
||||
if ($argc < 4) {
|
||||
echo "Resume usage {$argv[0]} --resume <table> <row>\n";
|
||||
exit();
|
||||
}
|
||||
$starttable = $argv[2];
|
||||
$startrow = $argv[3];
|
||||
$cfgfile = '.htconfig.php-mysql';
|
||||
}
|
||||
|
||||
$cfg = parse_htconfig($cfgfile);
|
||||
$type = get_configtype($cfg);
|
||||
if ($type != 'mysql') {
|
||||
echo "Error. Must start with standard mysql installation in .htconfig.php.\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if (!$cfg['port']) {
|
||||
$cfg['port'] = 3306;
|
||||
}
|
||||
try {
|
||||
$mydb = new PDO("mysql:host={$cfg['host']};dbname={$cfg['data']};port={$cfg['port']}", $cfg['user'], $cfg['pass']);
|
||||
} catch (PDOException $e) {
|
||||
echo "Error connecting to mysql DB: " . $e->getMessage() . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
// mysql insists on buffering even when you use fetch() instead of fetchAll() for some stupid reason
|
||||
// http://stackoverflow.com/questions/6895098/pdo-mysql-memory-consumption-with-large-result-set
|
||||
$mydb->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
|
||||
|
||||
if (!file_exists('.htconfig.php-pgsql')) {
|
||||
echo "Enter postgres server info:\n";
|
||||
$p['host'] = get_data("Hostname: ", '/[\w.]+/');
|
||||
$p['port'] = get_data("Enter port (0 for default): ", '/\d+/');
|
||||
$p['user'] = get_data("Username: ", '/\w+/');
|
||||
$p['pass'] = get_data("Password: ", '/[[:print:]]+/');
|
||||
$p['data'] = get_data("Database name: ", '/\w+/');
|
||||
$old = file_get_contents('.htconfig.php');
|
||||
$new = preg_replace(
|
||||
array(
|
||||
'/^(\$db_host\s*=\s*\')([\w.]+)(\';)$/m',
|
||||
'/^(\$db_port\s*=\s*\')(\d+)(\';)$/m',
|
||||
'/^(\$db_user\s*=\s*\')(\w+)(\';)$/m',
|
||||
'/^(\$db_pass\s*=\s*\')([[:print:]]+)(\';)/m',
|
||||
'/^(\$db_data\s*=\s*\')(\w+)(\';)$/m',
|
||||
'/^(\$db_type\s*=\s*\')(\d)(\';)$/m' // in case they already have it
|
||||
),
|
||||
array(
|
||||
"$1{$p['host']}$3",
|
||||
"\${1}{$p['port']}$3",
|
||||
"$1{$p['user']}$3",
|
||||
"$1{$p['pass']}$3",
|
||||
"$1{$p['data']}$3\n\$db_type = '1';\n", // they probably don't
|
||||
"\${1}1$3"
|
||||
),
|
||||
$old,
|
||||
1,
|
||||
$repl
|
||||
);
|
||||
if ($new === false || $repl < 5) {
|
||||
echo "Failed. Please make a postgres config file named .htconfig.php-pgsql - Be sure to add \"\$db_type = '1';\" to your config.\n";
|
||||
exit();
|
||||
}
|
||||
file_put_contents('.htconfig.php-pgsql', $new);
|
||||
}
|
||||
|
||||
$pcfg = parse_htconfig('.htconfig.php-pgsql');
|
||||
$ptype = get_configtype($pcfg);
|
||||
if ($ptype != 'pgsql') {
|
||||
echo "Error. Must have a valid pgsql config named .htconfig.php-pgsql. Be sure to add \"\$db_type = '1';\" to your config.\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
if (!$pcfg['port']) {
|
||||
$pcfg['port'] = 5432;
|
||||
}
|
||||
try {
|
||||
$pgdb = new PDO("pgsql:host={$pcfg['host']};dbname={$pcfg['data']};port={$pcfg['port']}", $pcfg['user'], $pcfg['pass']);
|
||||
} catch (PDOException $e) {
|
||||
echo "Error connecting to pgsql DB: " . $e->getMessage() . "\n";
|
||||
echo "cfg string: " . "pgsql:host={$pcfg['host']};dbname={$pcfg['data']};port={$pcfg['port']}\n";
|
||||
exit();
|
||||
}
|
||||
$B = "\033[0;34m";
|
||||
$H = "\033[0;35m";
|
||||
$W = "\033[1;37m";
|
||||
$M = "\033[1;31m";
|
||||
$N = "\033[0m";
|
||||
|
||||
if (isset($starttable)) {
|
||||
$r = ask_question(
|
||||
"Ready to migrate {$W}Red{$M}(#){$W}Matrix$N from mysql db @$B{$cfg['host']}$N/$B{$cfg['data']}$N to postgres db @$B{$pcfg['host']}$N/$B{$pcfg['data']}$N.
|
||||
|
||||
Resuming failed migration ({$M}experimental$N) starting at table '$starttable' row $startrow.
|
||||
Are you ready to begin (N/y)? ",
|
||||
array('y', 'n'),
|
||||
'n'
|
||||
);
|
||||
if ($r == 'n') {
|
||||
exit();
|
||||
}
|
||||
} else {
|
||||
$r = ask_question("Ready to migrate {$W}Red{$M}(#){$W}Matrix$N from mysql db @$B{$cfg['host']}$N/$B{$cfg['data']}$N to postgres db @$B{$pcfg['host']}$N/$B{$pcfg['data']}$N.
|
||||
The site will be disabled during the migration by moving the $H.htconfig.php$N file to $H.htconfig.php-mysql$N.
|
||||
If for any reason the migration fails, you will need to move the config file back into place manually before trying again.
|
||||
|
||||
Are you ready to begin (N/y)? ", array('y','n'), 'n');
|
||||
|
||||
if ($r == 'n') {
|
||||
exit();
|
||||
}
|
||||
|
||||
rename('.htconfig.php', '.htconfig.php-mysql');
|
||||
|
||||
run_sql('install/schema_postgres.sql', $pgdb, $err, $n);
|
||||
if ($err) {
|
||||
echo "There were $err errors creating the pgsql schema. Unable to continue.\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
echo "pgsql schema created. $n queries executed successfully.\n";
|
||||
}
|
||||
|
||||
$res = $pgdb->query("select relname, attname, pg_type.typname from ((pg_attribute inner join pg_class on attrelid=pg_class.oid) inner join pg_type on atttypid=pg_type.oid) inner join pg_namespace on relnamespace=pg_namespace.oid where nspname='public' and atttypid not in (26,27,28,29) and relkind='r' and attname <> 'item_search_vector';");
|
||||
if ($res === false) {
|
||||
echo "Error reading back schema. Unable to continue.\n";
|
||||
var_export($pgdb->errorInfo());
|
||||
exit();
|
||||
}
|
||||
$schema = [];
|
||||
while (($row = $res->fetch()) !== false) {
|
||||
$schema[$row[0]][$row[1]] = $row[2];
|
||||
}
|
||||
|
||||
$res = $pgdb->query("select relname, attname from pg_attribute inner join pg_class on attrelid=pg_class.oid inner join pg_constraint on conrelid=pg_class.oid and pg_attribute.attnum = any (conkey) where contype='p';");
|
||||
if ($res === false) {
|
||||
echo "Error reading back primary keys. Unable to continue.\n";
|
||||
var_export($pgdb->errorInfo());
|
||||
exit();
|
||||
}
|
||||
$pkeys = [];
|
||||
while (($row = $res->fetch()) !== false) {
|
||||
$pkeys[$row[0]] = $row[1];
|
||||
}
|
||||
|
||||
$err = 0;
|
||||
$n = 0;
|
||||
$reserved = array('ignore','key','with');
|
||||
foreach ($schema as $table => $fields) {
|
||||
if (isset($starttable) && !$n && $table != $starttable) {
|
||||
echo "Skipping table $table\n";
|
||||
continue;
|
||||
}
|
||||
$fnames = array_keys($fields);
|
||||
$pfnames = array_keys($fields);
|
||||
|
||||
foreach ($fnames as &$fname) {
|
||||
if (in_array($fname, $reserved)) {
|
||||
$fname = '`' . $fname . '`';
|
||||
}
|
||||
}
|
||||
$fstr = implode(',', $fnames);
|
||||
|
||||
foreach ($pfnames as &$pfname) {
|
||||
if (in_array($pfname, $reserved)) {
|
||||
$pfname = '"' . $pfname . '"';
|
||||
}
|
||||
}
|
||||
$pfstr = implode(',', $pfnames);
|
||||
|
||||
$cres = $mydb->query("SELECT count(*) FROM $table;");
|
||||
if ($cres === false) {
|
||||
echo "Fatal error counting table $table: " . var_export($mydb->errorInfo(), true) . "\n";
|
||||
exit();
|
||||
}
|
||||
$nrows = $cres->fetchColumn(0);
|
||||
$cres->closeCursor();
|
||||
|
||||
if (!$nrows) {
|
||||
echo "TABLE $table has 0 rows in mysql db.\n";
|
||||
continue;
|
||||
}
|
||||
|
||||
$pstr = '';
|
||||
for ($x = 0, $c = count($fields); $x < $c; $x++) {
|
||||
$pstr .= ($x ? ',?' : '?');
|
||||
}
|
||||
|
||||
if (isset($starttable) && $table == $starttable) {
|
||||
$selectsql = "SELECT $fstr FROM $table ORDER BY {$pkeys[$table]} LIMIT $nrows OFFSET $startrow;";
|
||||
$crow = $startrow;
|
||||
} else {
|
||||
$selectsql = "SELECT $fstr FROM $table ORDER BY {$pkeys[$table]};";
|
||||
$crow = 0;
|
||||
}
|
||||
|
||||
echo "\033[255DTABLE: $table [$c fields] $crow/$nrows (" . number_format(($crow / $nrows) * 100, 2) . "%)\033[K";
|
||||
|
||||
$res = $mydb->query($selectsql);
|
||||
if ($res === false) {
|
||||
echo "Fatal Error importing table $table: " . var_export($mydb->errorInfo(), true) . "\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
$istmt = $pgdb->prepare("INSERT INTO $table ($pfstr) VALUES ($pstr);");
|
||||
if ($istmt === false) {
|
||||
echo "Fatal error preparing query. Aborting.\n";
|
||||
var_export($pgdb->errorInfo());
|
||||
exit();
|
||||
}
|
||||
|
||||
while (($row = $res->fetch(PDO::FETCH_NUM)) !== false) {
|
||||
foreach ($row as $idx => &$val) {
|
||||
if (array_slice(array_values($fields), $idx, 1)[0] == 'timestamp' && $val == '0000-00-00 00:00:00') {
|
||||
$istmt->bindParam($idx + 1, ($nulldate = '0001-01-01 00:00:00'));
|
||||
} elseif (array_slice(array_values($fields), $idx, 1)[0] == 'bytea') {
|
||||
$istmt->bindParam($idx + 1, $val, PDO::PARAM_LOB);
|
||||
} else {
|
||||
$istmt->bindParam($idx + 1, $val);
|
||||
}
|
||||
}
|
||||
$r = $istmt->execute();
|
||||
if ($r === false) {
|
||||
$err++;
|
||||
echo "Insert error: " . var_export(array($pgdb->errorInfo(), $table, $fields, $row), true) . "\nResume with {$argv[0]} --resume $table $crow\n";
|
||||
exit();
|
||||
} else {
|
||||
$n++;
|
||||
}
|
||||
$crow++;
|
||||
if (($crow % 10) == 0 || $crow == $nrows) {
|
||||
echo "\033[255DTABLE: $table [$c fields] $crow/$nrows (" . number_format(($crow / $nrows) * 100, 2) . "%)\033[K";
|
||||
}
|
||||
}
|
||||
$res->closeCursor();
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
echo "Done with $err errors and $n inserts.\n";
|
||||
if ($err) {
|
||||
echo "Migration had errors. Aborting.\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
run_sql('install/migrate_mypg_fixseq.sql', $pgdb, $err, $n);
|
||||
echo "Sequences updated with $err errors and $n inserts.\n";
|
||||
if ($err) {
|
||||
exit();
|
||||
}
|
||||
|
||||
$r = ask_question("Everything successful. Once you connect up the pg database there is no going back. Do you want to make it live (N,y)?", array('y', 'n'), 'n');
|
||||
if ($r == 'n') {
|
||||
echo "You can make active by renaming .htconfig.php-pgsql to .htconfig.php, or start over by renaming .htconfig.php-mysql to .htconfig.php\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
rename('.htconfig.php-pgsql', '.htconfig.php');
|
||||
echo "Done. {$W}Red{$M}(#){$W}Matrix$N now running on postgres.\n";
|
|
@ -1,55 +0,0 @@
|
|||
SELECT SETVAL('public.abook_abook_id_seq', COALESCE(MAX(abook_id), 1) ) FROM public.abook;
|
||||
SELECT SETVAL('public.account_account_id_seq', COALESCE(MAX(account_id), 1) ) FROM public.account;
|
||||
SELECT SETVAL('public.addon_id_seq', COALESCE(MAX(id), 1) ) FROM public.addon;
|
||||
SELECT SETVAL('public.app_id_seq', COALESCE(MAX(id), 1) ) FROM public.app;
|
||||
SELECT SETVAL('public.attach_id_seq', COALESCE(MAX(id), 1) ) FROM public.attach;
|
||||
SELECT SETVAL('public.channel_channel_id_seq', COALESCE(MAX(channel_id), 1) ) FROM public.channel;
|
||||
SELECT SETVAL('public.chat_chat_id_seq', COALESCE(MAX(chat_id), 1) ) FROM public.chat;
|
||||
SELECT SETVAL('public.chatpresence_cp_id_seq', COALESCE(MAX(cp_id), 1) ) FROM public.chatpresence;
|
||||
SELECT SETVAL('public.chatroom_cr_id_seq', COALESCE(MAX(cr_id), 1) ) FROM public.chatroom;
|
||||
SELECT SETVAL('public.config_id_seq', COALESCE(MAX(id), 1) ) FROM public.config;
|
||||
SELECT SETVAL('public.conv_id_seq', COALESCE(MAX(id), 1) ) FROM public.conv;
|
||||
SELECT SETVAL('public.event_id_seq', COALESCE(MAX(id), 1) ) FROM public.event;
|
||||
SELECT SETVAL('public.fcontact_id_seq', COALESCE(MAX(id), 1) ) FROM public.fcontact;
|
||||
SELECT SETVAL('public.ffinder_id_seq', COALESCE(MAX(id), 1) ) FROM public.ffinder;
|
||||
SELECT SETVAL('public.fserver_id_seq', COALESCE(MAX(id), 1) ) FROM public.fserver;
|
||||
SELECT SETVAL('public.fsuggest_id_seq', COALESCE(MAX(id), 1) ) FROM public.fsuggest;
|
||||
SELECT SETVAL('public.group_member_id_seq', COALESCE(MAX(id), 1) ) FROM public.group_member;
|
||||
SELECT SETVAL('public.groups_id_seq', COALESCE(MAX(id), 1) ) FROM public.groups;
|
||||
SELECT SETVAL('public.hook_id_seq', COALESCE(MAX(id), 1) ) FROM public.hook;
|
||||
SELECT SETVAL('public.hubloc_hubloc_id_seq', COALESCE(MAX(hubloc_id), 1) ) FROM public.hubloc;
|
||||
SELECT SETVAL('public.issue_issue_id_seq', COALESCE(MAX(issue_id), 1) ) FROM public.issue;
|
||||
SELECT SETVAL('public.item_id_id_seq', COALESCE(MAX(id), 1) ) FROM public.item_id;
|
||||
SELECT SETVAL('public.item_id_seq', COALESCE(MAX(id), 1) ) FROM public.item;
|
||||
SELECT SETVAL('public.likes_id_seq', COALESCE(MAX(id), 1) ) FROM public.likes;
|
||||
SELECT SETVAL('public.mail_id_seq', COALESCE(MAX(id), 1) ) FROM public.mail;
|
||||
SELECT SETVAL('public.manage_id_seq', COALESCE(MAX(id), 1) ) FROM public.manage;
|
||||
SELECT SETVAL('public.menu_item_mitem_id_seq', COALESCE(MAX(mitem_id), 1) ) FROM public.menu_item;
|
||||
SELECT SETVAL('public.menu_menu_id_seq', COALESCE(MAX(menu_id), 1) ) FROM public.menu;
|
||||
SELECT SETVAL('public.notify_id_seq', COALESCE(MAX(id), 1) ) FROM public.notify;
|
||||
SELECT SETVAL('public.obj_obj_id_seq', COALESCE(MAX(obj_id), 1) ) FROM public.obj;
|
||||
SELECT SETVAL('public.pconfig_id_seq', COALESCE(MAX(id), 1) ) FROM public.pconfig;
|
||||
SELECT SETVAL('public.photo_id_seq', COALESCE(MAX(id), 1) ) FROM public.photo;
|
||||
SELECT SETVAL('public.poll_elm_pelm_id_seq', COALESCE(MAX(pelm_id), 1) ) FROM public.poll_elm;
|
||||
SELECT SETVAL('public.poll_poll_id_seq', COALESCE(MAX(poll_id), 1) ) FROM public.poll;
|
||||
SELECT SETVAL('public.profdef_id_seq', COALESCE(MAX(id), 1) ) FROM public.profdef;
|
||||
SELECT SETVAL('public.profext_id_seq', COALESCE(MAX(id), 1) ) FROM public.profext;
|
||||
SELECT SETVAL('public.profile_check_id_seq', COALESCE(MAX(id), 1) ) FROM public.profile_check;
|
||||
SELECT SETVAL('public.profile_id_seq', COALESCE(MAX(id), 1) ) FROM public.profile;
|
||||
SELECT SETVAL('public.register_id_seq', COALESCE(MAX(id), 1) ) FROM public.register;
|
||||
SELECT SETVAL('public.session_id_seq', COALESCE(MAX(id), 1) ) FROM public.session;
|
||||
SELECT SETVAL('public.shares_share_id_seq', COALESCE(MAX(share_id), 1) ) FROM public.shares;
|
||||
SELECT SETVAL('public.sign_id_seq', COALESCE(MAX(id), 1) ) FROM public.sign;
|
||||
SELECT SETVAL('public.source_src_id_seq', COALESCE(MAX(src_id), 1) ) FROM public.source;
|
||||
SELECT SETVAL('public.spam_id_seq', COALESCE(MAX(id), 1) ) FROM public.spam;
|
||||
SELECT SETVAL('public.sys_perms_id_seq', COALESCE(MAX(id), 1) ) FROM public.sys_perms;
|
||||
SELECT SETVAL('public.term_tid_seq', COALESCE(MAX(tid), 1) ) FROM public.term;
|
||||
SELECT SETVAL('public.updates_ud_id_seq', COALESCE(MAX(ud_id), 1) ) FROM public.updates;
|
||||
SELECT SETVAL('public.verify_id_seq', COALESCE(MAX(id), 1) ) FROM public.verify;
|
||||
SELECT SETVAL('public.vote_vote_id_seq', COALESCE(MAX(vote_id), 1) ) FROM public.vote;
|
||||
SELECT SETVAL('public.xchat_xchat_id_seq', COALESCE(MAX(xchat_id), 1) ) FROM public.xchat;
|
||||
SELECT SETVAL('public.xconfig_id_seq', COALESCE(MAX(id), 1) ) FROM public.xconfig;
|
||||
SELECT SETVAL('public.xign_id_seq', COALESCE(MAX(id), 1) ) FROM public.xign;
|
||||
SELECT SETVAL('public.xlink_xlink_id_seq', COALESCE(MAX(xlink_id), 1) ) FROM public.xlink;
|
||||
SELECT SETVAL('public.xtag_xtag_id_seq', COALESCE(MAX(xtag_id), 1) ) FROM public.xtag;
|
||||
SELECT SETVAL('public.xperm_xp_id_seq', COALESCE(MAX(xp_id), 1) ) FROM public.xperm;
|
|
@ -86,7 +86,8 @@
|
|||
if($cover) @unlink($cover);
|
||||
|
||||
// rename
|
||||
$author = array_shift(array_keys($epub->Authors()));
|
||||
$array = array_keys($epub->Authors());
|
||||
$author = array_shift($array);
|
||||
$title = $epub->Title();
|
||||
$new = to_file($author.'-'.$title);
|
||||
$new = $bookdir.$new.'.epub';
|
||||
|
|
Loading…
Reference in a new issue