From 846a9813b23911ae2a87d87fb6fd9f188ed84dc0 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 1 Oct 2012 18:02:11 -0700 Subject: here's where the heavy lifting begins - everything is likely to be broken for quite some time as we add location and db independence to items and conversations and work through the rest of the permissions and how to federate the buggers. --- mod/subthread.php | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100755 mod/subthread.php (limited to 'mod/subthread.php') diff --git a/mod/subthread.php b/mod/subthread.php new file mode 100755 index 000000000..b6e8c476a --- /dev/null +++ b/mod/subthread.php @@ -0,0 +1,160 @@ +argc > 1) ? notags(trim($a->argv[1])) : 0); + + $r = q("SELECT * FROM `item` WHERE `parent` = '%s' OR `parent-uri` = '%s' and parent = id LIMIT 1", + dbesc($item_id), + dbesc($item_id) + ); + + if(! $item_id || (! count($r))) { + logger('subthread: no item ' . $item_id); + return; + } + + $item = $r[0]; + + $owner_uid = $item['uid']; + + if(! can_write_wall($a,$owner_uid)) { + return; + } + + $remote_owner = null; + + if(! $item['wall']) { + // The top level post may have been written by somebody on another system + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($item['contact-id']), + intval($item['uid']) + ); + if(! count($r)) + return; + if(! $r[0]['self']) + $remote_owner = $r[0]; + } + + // this represents the post owner on this system. + + $r = q("SELECT `contact`.*, `user`.`nickname` FROM `contact` LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid` + WHERE `contact`.`self` = 1 AND `contact`.`uid` = %d LIMIT 1", + intval($owner_uid) + ); + if(count($r)) + $owner = $r[0]; + + if(! $owner) { + logger('like: no owner'); + return; + } + + if(! $remote_owner) + $remote_owner = $owner; + + + // This represents the person posting + + if((local_user()) && (local_user() == $owner_uid)) { + $contact = $owner; + } + else { + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($_SESSION['visitor_id']), + intval($owner_uid) + ); + if(count($r)) + $contact = $r[0]; + } + if(! $contact) { + return; + } + + $uri = item_new_uri($a->get_hostname(),$owner_uid); + + $post_type = (($item['resource_id']) ? t('photo') : t('status')); + $objtype = (($item['resource_id']) ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE ); + $link = xmlify('' . "\n") ; + $body = $item['body']; + + $obj = <<< EOT + + + $objtype + 1 + {$item['uri']} + $link + + $body + +EOT; + $bodyverb = t('%1$s is following %2$s\'s %3$s'); + + if(! isset($bodyverb)) + return; + + $arr = array(); + + $arr['uri'] = $uri; + $arr['uid'] = $owner_uid; + $arr['contact-id'] = $contact['id']; + $arr['type'] = 'activity'; + $arr['wall'] = $item['wall']; + $arr['origin'] = 1; + $arr['gravity'] = GRAVITY_LIKE; + $arr['parent'] = $item['id']; + $arr['parent-uri'] = $item['uri']; + $arr['thr_parent'] = $item['uri']; + $arr['owner-name'] = $remote_owner['name']; + $arr['owner-link'] = $remote_owner['url']; + $arr['owner-avatar'] = $remote_owner['thumb']; + $arr['author-name'] = $contact['name']; + $arr['author-link'] = $contact['url']; + $arr['author-avatar'] = $contact['thumb']; + + $ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]'; + $alink = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]'; + $plink = '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]'; + $arr['body'] = sprintf( $bodyverb, $ulink, $alink, $plink ); + + $arr['verb'] = $activity; + $arr['object-type'] = $objtype; + $arr['object'] = $obj; + $arr['allow_cid'] = $item['allow_cid']; + $arr['allow_gid'] = $item['allow_gid']; + $arr['deny_cid'] = $item['deny_cid']; + $arr['deny_gid'] = $item['deny_gid']; + $arr['visible'] = 1; + $arr['unseen'] = 1; + $arr['last-child'] = 0; + + $post_id = item_store($arr); + + if(! $item['visible']) { + $r = q("UPDATE `item` SET `visible` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($item['id']), + intval($owner_uid) + ); + } + + $arr['id'] = $post_id; + + call_hooks('post_local_end', $arr); + + killme(); + +} + + -- cgit v1.2.3