aboutsummaryrefslogtreecommitdiffstats
path: root/Zotlabs/Module/Locs.php
blob: 7273c108c2c9d91344556e80a071cd9bbdab1f86 (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
131
132
133
134
135
136
137
138
139
140
141
142
<?php
namespace Zotlabs\Module; /** @file */

use App;
use Zotlabs\Web\Controller;
use Zotlabs\Daemon\Master;

class Locs extends Controller {

	function post() {

		if(! local_channel())
			return;

		$channel = App::get_channel();

		if($_REQUEST['primary']) {
			$hubloc_id = intval($_REQUEST['primary']);
			if($hubloc_id) {

				$r = q("select * from hubloc where hubloc_id = %d and hubloc_hash = '%s' limit 1",
					intval($hubloc_id),
					dbesc($channel['channel_hash'])
				);

				if(! $r) {
					notice( t('Location not found.') . EOL);
					return;
				}

				q("UPDATE hubloc SET hubloc_primary = 0 WHERE hubloc_primary = 1 AND (hubloc_hash = '%s' OR hubloc_hash = '%s')",
					dbesc($channel['channel_hash']),
					dbesc($channel['channel_portable_id'])
				);

				q("UPDATE hubloc SET hubloc_primary = 1 WHERE hubloc_id = %d AND hubloc_hash = '%s'",
					intval($hubloc_id),
					dbesc($channel['channel_hash'])
				);

				$x = q("select * from hubloc where hubloc_id = %d and hubloc_hash = '%s' ",
					intval($hubloc_id),
					dbesc($channel['channel_hash'])

				if ($x) {
					hubloc_change_primary($x[0]);
				}

				Master::Summon( [ 'Notifier', 'refresh_all', $channel['channel_id'] ] );
				return;
			}
		}

		if($_REQUEST['drop']) {
			$hubloc_id = intval($_REQUEST['drop']);

			if($hubloc_id) {
				$r = q("select * from hubloc where hubloc_id = %d and hubloc_url != '%s' and hubloc_hash = '%s' limit 1",
					intval($hubloc_id),
					dbesc(z_root()),
					dbesc($channel['channel_hash'])
				);

				if(! $r) {
					notice( t('Location not found.') . EOL);
					return;
				}

				if(intval($r[0]['hubloc_primary'])) {
					$x = q("select hubloc_id from hubloc where hubloc_primary = 1 and hubloc_hash = '%s'",
						dbesc($channel['channel_hash'])
					);
					if(! $x) {
						notice( t('Location lookup failed.'));
						return;
					}
					if(count($x) == 1) {
						notice( t('Please select another location to become primary before removing the primary location.') . EOL);
						return;
					}
				}

				q("UPDATE hubloc SET hubloc_deleted = 1 WHERE hubloc_id_url = '%s' AND (hubloc_hash = '%s' OR hubloc_hash = '%s')",
					dbesc($r[0]['hubloc_id_url']),
					dbesc($channel['channel_hash']),
					dbesc($channel['channel_portable_id'])
				);
				Master::Summon( [ 'Notifier', 'refresh_all', $channel['channel_id'] ] );
				return;
			}
		}
	}



	function get() {

		if(! local_channel()) {
			notice( t('Permission denied.') . EOL);
			return;
		}

		$channel = App::get_channel();

		if($_REQUEST['sync']) {
			Master::Summon( [ 'Notifier', 'refresh_all', $channel['channel_id'] ] );
			info( t('Syncing locations') . EOL);
			goaway(z_root() . '/locs');
		}

		$r = q("select * from hubloc where hubloc_hash = '%s'",
			dbesc($channel['channel_hash'])
		);

		if(! $r) {
			notice( t('No locations found.') . EOL);
			return;
		}

		for($x = 0; $x < count($r); $x ++) {
			$r[$x]['primary'] = (intval($r[$x]['hubloc_primary']) ? true : false);
			$r[$x]['deleted'] = (intval($r[$x]['hubloc_deleted']) ? true : false);
		}

		$o = replace_macros(get_markup_template('locmanage.tpl'), array(
			'$header' => t('Manage Channel Locations'),
			'$loc' => t('Location'),
			'$addr' => t('Address'),
			'$mkprm' => t('Primary'),
			'$drop' => t('Drop'),
			'$submit' => t('Submit'),
			'$sync' => t('Sync Now'),
			'$sync_text' => t('Please wait several minutes between consecutive operations.'),
			'$drop_text' => t('When possible, drop a location by logging into that website/hub and removing your channel.'),
			'$last_resort' => t('Use this form to drop the location if the hub is no longer operating.'),
			'$hubs' => $r
		));

		return $o;
	}

}