mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-21 00:52:33 -04:00
150 lines
3.6 KiB
PHP
Executable File
150 lines
3.6 KiB
PHP
Executable File
#!/usr/bin/env php
|
|
<?php
|
|
|
|
// Convert database to support Zot 6
|
|
require_once('include/cli_startup.php');
|
|
|
|
cli_startup();
|
|
|
|
$dryrun = (($argv[1] === 'dry-run') ? true : false);
|
|
|
|
$zot = [];
|
|
$zot6 = [];
|
|
|
|
// indexed columns
|
|
$core = [
|
|
'abconfig' => ['xchan'],
|
|
'abook' => ['abook_xchan'],
|
|
'app' => ['app_author'],
|
|
'chat' => ['chat_xchan'],
|
|
'chatpresence' => ['cp_xchan'],
|
|
'dreport' => ['dreport_recip', 'dreport_xchan'],
|
|
'mail' => ['from_xchan', 'to_xchan'],
|
|
'pgrp_member' => ['xchan'],
|
|
'source' => ['src_channel_xchan', 'src_xchan'],
|
|
'updates' => ['ud_hash'],
|
|
'xchat' => ['xchat_xchan'],
|
|
'xign' => ['xchan'],
|
|
'xlink' => ['xlink_xchan', 'xlink_link'],
|
|
'xprof' => ['xprof_hash'],
|
|
'xtag' => ['xtag_hash']
|
|
];
|
|
|
|
$r = dbq("SELECT channel.channel_name, channel.channel_portable_id, xchan.xchan_network FROM channel
|
|
LEFT JOIN xchan ON channel_portable_id = xchan_hash
|
|
WHERE xchan.xchan_network = 'zot'
|
|
AND channel.channel_removed = 0"
|
|
);
|
|
|
|
if($dryrun) {
|
|
echo "--------------------------------------------------" . PHP_EOL;
|
|
echo "-- This is a dry-run. No data will be modified! --" . PHP_EOL;
|
|
echo "--------------------------------------------------" . PHP_EOL;
|
|
sleep(3);
|
|
}
|
|
|
|
foreach($r as $rr) {
|
|
|
|
$zot_xchan = $rr['channel_portable_id'];
|
|
|
|
$r = q("SELECT xchan_guid FROM xchan WHERE xchan_hash = '%s' AND xchan_network = 'zot'",
|
|
dbesc($zot_xchan)
|
|
);
|
|
|
|
if(!$r) {
|
|
echo '-- ' . $zot_xchan . 'failed: zot xchan not found' . PHP_EOL;
|
|
continue;
|
|
}
|
|
|
|
$guid = $r[0]['xchan_guid'];
|
|
|
|
$r = q("SELECT xchan_hash, xchan_guid_sig FROM xchan WHERE xchan_guid = '%s' AND xchan_network = 'zot6'",
|
|
dbesc($guid)
|
|
);
|
|
|
|
if(!$r) {
|
|
echo '-- ' . $zot_xchan . 'failed: zot6 xchan not found' . PHP_EOL;
|
|
continue;
|
|
}
|
|
|
|
$zot[] = $zot_xchan;
|
|
$zot6[] = $r[0]['xchan_hash'];
|
|
|
|
echo "-- converting indexed data for " . $rr['channel_name'] . PHP_EOL;
|
|
foreach($core as $table => $cols) {
|
|
foreach($cols as $col) {
|
|
if(! $dryrun) {
|
|
$z = q("UPDATE $table SET $col = '%s' WHERE $col = '%s'",
|
|
dbesc($r[0]['xchan_hash']),
|
|
dbesc($zot_xchan)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// columns which require a whole table scan
|
|
$core = [
|
|
'attach' => ['creator', 'allow_cid', 'deny_cid'],
|
|
'channel' => ['channel_allow_cid', 'channel_deny_cid'],
|
|
'chatroom' => ['allow_cid', 'deny_cid'],
|
|
'config' => ['v'],
|
|
'event' => ['event_xchan', 'allow_cid', 'deny_cid'],
|
|
'iconfig' => ['v'],
|
|
'item' => ['owner_xchan', 'author_xchan', 'source_xchan', 'route', 'allow_cid', 'deny_cid'],
|
|
'menu_item' => ['allow_cid', 'deny_cid'],
|
|
'obj' => ['allow_cid', 'deny_cid'],
|
|
'pconfig' => ['v'],
|
|
'photo' => ['xchan', 'allow_cid', 'deny_cid'],
|
|
'xconfig' => ['xchan', 'v']
|
|
];
|
|
|
|
foreach($core as $table => $cols) {
|
|
|
|
$fields = implode(", ", $cols);
|
|
$id_col = db_columns($table)[0];
|
|
$cur_id = 0;
|
|
$i = 0;
|
|
|
|
$r = dbq("SELECT COUNT(*) AS total, MAX($id_col) AS max_id FROM $table");
|
|
$items_total = $r[0]['total'];
|
|
$max_id = $r[0]['max_id'];
|
|
|
|
echo PHP_EOL;
|
|
echo "-- converting $table table data" . PHP_EOL;
|
|
|
|
while ($cur_id < $max_id) {
|
|
|
|
$r = dbq("SELECT $id_col FROM $table WHERE $id_col > $cur_id ORDER BY $id_col LIMIT 100");
|
|
|
|
foreach($r as $rr) {
|
|
|
|
$q = '';
|
|
$cur_id = $rr[$id_col];
|
|
$x = dbq("SELECT $fields FROM $table WHERE $id_col = $cur_id")[0];
|
|
|
|
foreach($x as $k => $v)
|
|
$q .= (empty($q) ? "UPDATE $table SET " : ", ") . "$k = '" . dbesc(str_replace($zot, $zot6, $x[$k])) . "'";
|
|
|
|
$q .= " WHERE $id_col = $cur_id";
|
|
|
|
if(! $dryrun)
|
|
dbq("$q");
|
|
|
|
$i++;
|
|
}
|
|
|
|
echo "$i/$items_total\r";
|
|
|
|
}
|
|
|
|
echo "$i/$items_total\r";
|
|
echo PHP_EOL;
|
|
|
|
}
|
|
|
|
echo PHP_EOL;
|
|
echo "Done!" . PHP_EOL;
|
|
|
|
|