From ff2ada207a7c90f095d1fad1513440eb08d3840a Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 17 Sep 2013 20:50:09 -0700 Subject: Pieces we'll need to tie together chanman and account/channel deletion and directory sync. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. Please do not mess with any of this. OK? Understood? --- boot.php | 1 + include/Contact.php | 59 +++++++++++++++++++++++++++++++++++++++------------- include/notifier.php | 35 ++++++++++++++++++++++++++----- include/zot.php | 10 +++++++++ mod/chanman.php | 2 ++ mod/zfinger.php | 3 ++- 6 files changed, 89 insertions(+), 21 deletions(-) diff --git a/boot.php b/boot.php index b9013711d..6c4ad0ca0 100755 --- a/boot.php +++ b/boot.php @@ -341,6 +341,7 @@ define ( 'NOTIFY_SYSTEM', 0x8000 ); define ( 'HUBLOC_FLAGS_PRIMARY', 0x0001); define ( 'HUBLOC_FLAGS_UNVERIFIED', 0x0002); +define ( 'HUBLOC_FLAGS_DELETED', 0x1000); define ( 'XCHAN_FLAGS_HIDDEN', 0x0001); diff --git a/include/Contact.php b/include/Contact.php index 46d356f3f..b9e879bcf 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -147,7 +147,9 @@ function user_remove($uid) { } -function account_remove($account_id) { +function account_remove($account_id,$local = true) { + + logger('account_remove: ' . $account_id); if(! intval($account_id)) { logger('account_remove: no account.'); @@ -179,7 +181,7 @@ function account_remove($account_id) { ); if($x) { foreach($x as $xx) { - channel_remove($xx['channel_id']); + channel_remove($xx['channel_id'],$local); } } @@ -191,7 +193,7 @@ function account_remove($account_id) { } -function channel_remove($channel_id) { +function channel_remove($channel_id, $local = true) { if(! $channel_id) return; @@ -199,13 +201,38 @@ function channel_remove($channel_id) { logger('Removing channel: ' . $channel_id); $r = q("select * from channel where channel_id = %d limit 1", intval($channel_id)); + if(! $r) { + logger('channel_remove: channel not found: ' . $channel_id); + return; + } + + $channel = $r[0]; call_hooks('channel_remove',$r[0]); + if(! $local) { + // FIXME notify the directory // FIXME notify all contacts + $r = q("update channel set channel_pageflags = (channel_pageflags | %d), channel_r_stream = 0, channel_r_profile = 0, + channel_r_photos = 0, channel_r_abook = 0, channel_w_stream = 0, channel_w_wall = 0, channel_w_tagwall = 0, + channel_w_comment = 0, channel_w_mail = 0, channel_w_photos = 0, channel_w_chat = 0, channel_a_delegate = 0, + channel_r_storage = 0, channel_w_storage = 0, channel_r_pages = 0, channel_w_pages = 0 where channel_id = %d limit 1", + intval(PAGE_REMOVED), + intval($channel_id) + ); + + $r = q("update hubloc set hubloc_flags = hubloc_flags | %d where hubloc_hash = '%s'", + intval(HUBLOC_FLAGS_DELETED), + dbesc($channel['channel_hash']) + ); + + proc_run('php','include/notifier.php','purge_all',$channel_id); + + + } q("DELETE FROM `group` WHERE `uid` = %d", intval($channel_id)); q("DELETE FROM `group_member` WHERE `uid` = %d", intval($channel_id)); @@ -278,18 +305,20 @@ function remove_all_xchan_resources($xchan, $channel_id = 0) { ); - $r = q("delete from xchan where xchan_hash = '%s' limit 1", - dbesc($xchan) - ); - $r = q("delete from hubloc where hubloc_hash = '%s'", - dbesc($xchan) - ); - $r = q("delete from abook where abook_xchan = '%s'", - dbesc($xchan) - ); - $r = q("delete from xtag where xtag_hash = '%s'", - dbesc($xchan) - ); +// This could get sticky with directories + +// $r = q("delete from xchan where xchan_hash = '%s' limit 1", +// dbesc($xchan) +// ); +// $r = q("delete from hubloc where hubloc_hash = '%s'", +// dbesc($xchan) +// ); +// $r = q("delete from abook where abook_xchan = '%s'", +// dbesc($xchan) +// ); +// $r = q("delete from xtag where xtag_hash = '%s'", +// dbesc($xchan) +// ); } } diff --git a/include/notifier.php b/include/notifier.php index e1f150bf2..0c7ac5264 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -54,6 +54,7 @@ require_once('include/html2plain.php'); * ZOT * permission_update abook_id * refresh_all channel_id + * purge_all channel_id * expire channel_id * relay item_id (item was relayed to owner, we will deliver it as owner) * @@ -219,6 +220,26 @@ function notifier_run($argv, $argc){ $private = false; $packet_type = 'refresh'; } + elseif($cmd === 'purge_all') { + logger('notifier: purge_all: ' . $item_id); + $s = q("select * from channel where channel_id = %d limit 1", + intval($item_id) + ); + if($s) + $channel = $s[0]; + $uid = $item_id; + $recipients = array(); + $r = q("select abook_xchan from abook where abook_channel = %d", + intval($item_id) + ); + if($r) { + foreach($r as $rr) { + $recipients[] = $rr['abook_xchan']; + } + } + $private = false; + $packet_type = 'purge'; + } else { // Normal items @@ -388,7 +409,7 @@ function notifier_run($argv, $argc){ $sql_extra = (($private) ? "" : " or hubloc_url = '" . z_root() . "' "); - $r = q("select distinct hubloc_sitekey, hubloc_callback, hubloc_host from hubloc + $r = q("select distinct hubloc_sitekey, hubloc_flags, hubloc_callback, hubloc_host from hubloc where hubloc_hash in (" . implode(',',$recipients) . ") $sql_extra group by hubloc_sitekey"); if(! $r) { logger('notifier: no hubs'); @@ -397,8 +418,12 @@ function notifier_run($argv, $argc){ $hubs = $r; $hublist = array(); - foreach($hubs as $hub) - $hublist[] = $hub['hubloc_host']; + foreach($hubs as $hub) { + // don't try to deliver to deleted hublocs + if(! ($hub['hubloc_flags'] & HUBLOC_FLAGS_DELETED)) { + $hublist[] = $hub['hubloc_host']; + } + } logger('notifier: will notify/deliver to these hubs: ' . print_r($hublist,true), LOGGER_DEBUG); @@ -414,8 +439,8 @@ function notifier_run($argv, $argc){ foreach($hubs as $hub) { $hash = random_string(); - if($packet_type === 'refresh') { - $n = zot_build_packet($channel,'refresh'); + if($packet_type === 'refresh' || $packet_type === 'purge') { + $n = zot_build_packet($channel,$packet_type); q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($channel['channel_account']), diff --git a/include/zot.php b/include/zot.php index 0f42ddc7f..74ac6d015 100644 --- a/include/zot.php +++ b/include/zot.php @@ -610,6 +610,16 @@ function import_xchan($arr) { $what = 'primary_hub '; $changed = true; } + if((($r[0]['hubloc_flags'] & HUBLOC_FLAGS_DELETED) && (! $location['deleted'])) + || ((! ($r[0]['hubloc_flags'] & HUBLOC_FLAGS_DELETED)) && ($location['deleted']))) { + $r = q("update hubloc set hubloc_flags = (hubloc_flags ^ %d), hubloc_updated = '%s' where hubloc_id = %d limit 1", + intval(HUBLOC_FLAGS_DELETED), + dbesc(datetime_convert()), + intval($r[0]['hubloc_id']) + ); + $what = 'delete_hub '; + $changed = true; + } continue; } diff --git a/mod/chanman.php b/mod/chanman.php index 2657e7be9..7a89708d7 100644 --- a/mod/chanman.php +++ b/mod/chanman.php @@ -27,3 +27,5 @@ - Some of these actions should probably require email verification */ + + diff --git a/mod/zfinger.php b/mod/zfinger.php index 70e3bdca6..a06d9f4b5 100644 --- a/mod/zfinger.php +++ b/mod/zfinger.php @@ -179,7 +179,8 @@ function zfinger_init(&$a) { 'url' => $hub['hubloc_url'], 'url_sig' => $hub['hubloc_url_sig'], 'callback' => $hub['hubloc_callback'], - 'sitekey' => $hub['hubloc_sitekey'] + 'sitekey' => $hub['hubloc_sitekey'], + 'deleted' => (($hub['hubloc_flags'] & HUBLOC_FLAGS_DELETED) ? true : false) ); } } -- cgit v1.2.3