diff options
author | friendica <info@friendica.com> | 2012-10-01 18:02:11 -0700 |
---|---|---|
committer | friendica <info@friendica.com> | 2012-10-01 18:02:11 -0700 |
commit | 846a9813b23911ae2a87d87fb6fd9f188ed84dc0 (patch) | |
tree | a8a78b379cc8f4e25812c5b2cac603c86b6b1472 /mod/subthread.php | |
parent | d261fe271fdee747244c76f7ba4679b8372a2e8c (diff) | |
download | volse-hubzilla-846a9813b23911ae2a87d87fb6fd9f188ed84dc0.tar.gz volse-hubzilla-846a9813b23911ae2a87d87fb6fd9f188ed84dc0.tar.bz2 volse-hubzilla-846a9813b23911ae2a87d87fb6fd9f188ed84dc0.zip |
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.
Diffstat (limited to 'mod/subthread.php')
-rwxr-xr-x | mod/subthread.php | 160 |
1 files changed, 160 insertions, 0 deletions
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 @@ +<?php + +require_once('include/security.php'); +require_once('include/bbcode.php'); +require_once('include/items.php'); + + +function subthread_content(&$a) { + + if(! local_user() && ! remote_user()) { + return; + } + + $activity = ACTIVITY_FOLLOW; + + $item_id = (($a->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('<link rel="alternate" type="text/html" href="' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . '" />' . "\n") ; + $body = $item['body']; + + $obj = <<< EOT + + <object> + <type>$objtype</type> + <local>1</local> + <id>{$item['uri']}</id> + <link>$link</link> + <title></title> + <content>$body</content> + </object> +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(); + +} + + |