aboutsummaryrefslogtreecommitdiffstats
path: root/Zotlabs/Module/Z6trans.php
blob: 0caf096c9aba490c9fb3e2ba3eb666a225d3bb6d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?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 get() {
		if(!is_site_admin())
			return 'Not Allowed';

		$path = 'store/z6trans.sql';

		$r = q("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"
		);

		$q = '';

		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) {
				$q .= '-- ' . $zot_xchan . 'failed: zot xchan not found' . "\r\n";
				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) {
				$q .= '-- ' . $zot_xchan . 'failed: zot6 xchan not found' . "\r\n";
				continue;
			}

			$zot6_xchan = $r[0]['xchan_hash'];

			$core = self::get_core_cols();

			$q .= '-- Transforming ' . $rr['channel_name'] . "\r\n";

			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)
					);

				}

			}

		}

		if($q)
			file_put_contents($path, $q);

		$o = '<h2>' . t('Update to Hubzilla 5.0 step 2') . '</h2><br>';

		$o .= '<h3>' . t('To complete the update please run') . '</h3>';
		if(ACTIVE_DBTYPE == DBTYPE_MYSQL)
			$o .= '<code>source ' . $_SERVER["DOCUMENT_ROOT"] . '/' . $path . '</code><h3>from the mysql console.</h3>';
		else
			$o .= '<code>\i ' . $_SERVER["DOCUMENT_ROOT"] . '/' . $path . '</code><h3>from the postgresql console.</h3>';

		$o .= '<br><h3>' . t('INFO: this command can take a very long time depending on your DB size.') . '</h3>';

		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;

	}

}