aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Zotlabs/Module/Z6trans.php200
1 files changed, 200 insertions, 0 deletions
diff --git a/Zotlabs/Module/Z6trans.php b/Zotlabs/Module/Z6trans.php
new file mode 100644
index 000000000..ac8c67c79
--- /dev/null
+++ b/Zotlabs/Module/Z6trans.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * @file Zotlabs/Module/Z6trans.php
+ *
+ * @brief replace all occurances of an zot xchan with the zot6 xchan in DB.
+ *
+ */
+
+namespace Zotlabs\Module;
+
+use Zotlabs\Web\Controller;
+
+class Z6trans extends Controller {
+
+ function post() {
+ if(!is_site_admin())
+ return;
+
+ $zot_xchan = trim($_POST['zot_xchan']);
+
+ $r = q("SELECT xchan_guid FROM xchan WHERE xchan_hash = '%s' AND xchan_network = 'zot'",
+ dbesc($zot_xchan)
+ );
+
+ if(!$r) {
+ notice(t('Zot xchan not found. Aborting.') . EOL);
+ return;
+ }
+
+ $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) {
+ notice(t('No zot6 xchan found. Aborting.') . EOL);
+ return;
+ }
+
+ $zot6_xchan = $r[0]['xchan_hash'];
+ $zot6_xchan_guid_sig = $r[0]['xchan_guid_sig'];
+
+
+ $r = q("SELECT * FROM channel WHERE channel_hash = '%s'",
+ dbesc($zot_xchan)
+ );
+
+ // We got everything we need - start transforming.
+
+ if($r) {
+ logger("Transforming channel $zot_xchan");
+ q("UPDATE channel SET channel_hash = '%s', channel_portable_id = '%s', channel_guid_sig = '%s' WHERE channel_hash = '%s'",
+ dbesc($zot6_xchan),
+ dbesc($zot_xchan),
+ dbesc($zot6_xchan_guid_sig),
+ dbesc($zot_xchan)
+ );
+ }
+
+ $core = self::get_core_cols();
+
+ foreach($core as $table => $cols) {
+ foreach($cols as $col) {
+ logger("Transforming $table - $col");
+ q("UPDATE %s SET %s = replace(%s, '%s', '%s')",
+ dbesc($table),
+ dbesc($col),
+ dbesc($col),
+ dbesc($zot_xchan),
+ dbesc($zot6_xchan)
+ );
+ }
+ logger("$table done.");
+ }
+ logger("Transformation completed.");
+
+
+
+ }
+
+ function get() {
+ if(!is_site_admin())
+ return 'Not Allowed';
+
+ $path = 'store/z6upgrade.sql';
+
+ $r = q("SELECT channel.channel_name, channel.channel_hash, xchan.xchan_network FROM channel LEFT JOIN xchan ON channel_hash = xchan_hash WHERE xchan.xchan_network = 'zot' AND channel.channel_removed = 0");
+
+ foreach($r as $rr) {
+
+ $zot_xchan = $rr['channel_hash'];
+
+ $r = q("SELECT xchan_guid FROM xchan WHERE xchan_hash = '%s' AND xchan_network = 'zot'",
+ dbesc($zot_xchan)
+ );
+
+ if(!$r) {
+ notice(t('Zot xchan not found. Aborting.') . EOL);
+ return;
+ }
+
+ $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) {
+ notice(t('No zot6 xchan found. Aborting.') . EOL);
+ return;
+ }
+
+ $zot6_xchan = $r[0]['xchan_hash'];
+ $zot6_xchan_guid_sig = $r[0]['xchan_guid_sig'];
+
+ //this should probably happen in a db_update during upgrading
+ $q .= sprintf("UPDATE channel SET channel_hash = '%s', channel_portable_id = '%s', channel_guid_sig = '%s' WHERE channel_hash = '%s';\r\n",
+ dbesc($zot6_xchan),
+ dbesc($zot_xchan),
+ dbesc($zot6_xchan_guid_sig),
+ dbesc($zot_xchan)
+ );
+
+ $core = self::get_core_cols();
+
+ foreach($core as $table => $cols) {
+
+ foreach($cols as $col) {
+
+ $q .= sprintf("UPDATE %s SET %s = replace(%s, '%s', '%s');\r\n",
+ dbesc($table),
+ dbesc($col),
+ dbesc($col),
+ dbesc($zot_xchan),
+ dbesc($zot6_xchan)
+ );
+
+ }
+
+ }
+
+ file_put_contents($path, $q);
+
+ }
+
+
+ $o = '<h3>' . t('Transform a single channel') . '</h3>';
+ $o .= '<form action="z6trans" method="post">';
+ $o .= t('Enter zot xchan to transform: ') . '<br>';
+ $o .= '<input type="text" style="width:100%;" name="zot_xchan" value=""><br>';
+ $o .= '<input type="submit" name="submit" value="' . t('Submit') .'"></form>';
+ $o .= '<br><br><br>';
+
+
+ $o .= '<h3>' . t('To transform all channels') . '</h3>';
+ if(ACTIVE_DBTYPE == DBTYPE_MYSQL)
+ $o .= 'Run <code>source ' . $_SERVER["DOCUMENT_ROOT"] . '/' . $path . '</code> from the mysql console to complete the upgrade.';
+ else
+ $o .= 'Run <code>\i ' . $_SERVER["DOCUMENT_ROOT"] . '/' . $path . '</code> from the postgresql console to complete the upgrade.';
+
+ return $o;
+
+ }
+
+ function get_core_cols() {
+
+ $core = [
+ 'abconfig' => ['xchan'],
+ 'abook' => ['abook_xchan'],
+ 'app' => ['app_author'],
+ 'attach' => ['creator', 'allow_cid', 'deny_cid'],
+ 'channel' => ['channel_allow_cid', 'channel_deny_cid'],
+ 'chat' => ['chat_xchan'],
+ 'chatpresence' => ['cp_xchan'],
+ 'chatroom' => ['allow_cid', 'deny_cid'],
+ 'config' => ['v'],
+ 'dreport' => ['dreport_recip', 'dreport_xchan'],
+ 'event' => ['event_xchan', 'allow_cid', 'deny_cid'],
+ 'iconfig' => ['v'],
+ 'item' => ['owner_xchan', 'author_xchan', 'source_xchan', 'route', 'allow_cid', 'deny_cid'],
+ 'mail' => ['from_xchan', 'to_xchan'],
+ 'menu_item' => ['allow_cid', 'deny_cid'],
+ 'obj' => ['allow_cid', 'deny_cid'],
+ 'pconfig' => ['v'],
+ 'pgrp_member' => ['xchan'],
+ 'photo' => ['xchan', 'allow_cid', 'deny_cid'],
+ 'source' => ['src_channel_xchan', 'src_xchan'],
+ 'updates' => ['ud_hash'],
+ 'xchat' => ['xchat_xchan'],
+ 'xconfig' => ['xchan', 'v'],
+ 'xign' => ['xchan'],
+ 'xlink' => ['xlink_xchan', 'xlink_link'],
+ 'xprof' => ['xprof_hash'],
+ 'xtag' => ['xtag_hash'],
+ ];
+
+ return $core;
+
+ }
+
+}