aboutsummaryrefslogtreecommitdiffstats
path: root/mod/subthread.php
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2012-10-01 18:02:11 -0700
committerfriendica <info@friendica.com>2012-10-01 18:02:11 -0700
commit846a9813b23911ae2a87d87fb6fd9f188ed84dc0 (patch)
treea8a78b379cc8f4e25812c5b2cac603c86b6b1472 /mod/subthread.php
parentd261fe271fdee747244c76f7ba4679b8372a2e8c (diff)
downloadvolse-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-xmod/subthread.php160
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();
+
+}
+
+