<?php
+require_once("include/diaspora.php");
/**
* @brief add/remove activity to an item
break;
}
-
logger('like: verb ' . $verb . ' item ' . $item_id);
-
$r = q("SELECT * FROM `item` WHERE `id` = '%s' OR `uri` = '%s' LIMIT 1",
dbesc($item_id),
dbesc($item_id)
);
- if(! $item_id || (! count($r))) {
+ if(! $item_id || (! dbm::is_result($r))) {
logger('like: no item ' . $item_id);
return false;
}
$owner_uid = $item['uid'];
- if(! can_write_wall($a,$owner_uid)) {
+ if (! can_write_wall($a,$owner_uid)) {
return false;
}
intval($item['contact-id']),
intval($item['uid'])
);
- if(! count($r))
+ if (! dbm::is_result($r)) {
return false;
- if(! $r[0]['self'])
+ }
+ if (! $r[0]['self']) {
$remote_owner = $r[0];
+ }
}
// this represents the post owner on this system.
WHERE `contact`.`self` = 1 AND `contact`.`uid` = %d LIMIT 1",
intval($owner_uid)
);
- if(count($r))
+ if (dbm::is_result($r)) {
$owner = $r[0];
+ }
- if(! $owner) {
+ if (! $owner) {
logger('like: no owner');
return false;
}
- if(! $remote_owner)
+ if (! $remote_owner) {
$remote_owner = $owner;
-
+ }
// This represents the person posting
- if((local_user()) && (local_user() == $owner_uid)) {
+ if ((local_user()) && (local_user() == $owner_uid)) {
$contact = $owner;
- }
- else {
+ } else {
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($_SESSION['visitor_id']),
intval($owner_uid)
);
- if(count($r))
+ if (dbm::is_result($r)) {
$contact = $r[0];
+ }
}
- if(! $contact) {
+ if (! $contact) {
return false;
}
// event participation are essentially radio toggles. If you make a subsequent choice,
// we need to eradicate your first choice.
- if($activity === ACTIVITY_ATTEND || $activity === ACTIVITY_ATTENDNO || $activity === ACTIVITY_ATTENDMAYBE) {
+ if ($activity === ACTIVITY_ATTEND || $activity === ACTIVITY_ATTENDNO || $activity === ACTIVITY_ATTENDMAYBE) {
$verbs = " '" . dbesc(ACTIVITY_ATTEND) . "','" . dbesc(ACTIVITY_ATTENDNO) . "','" . dbesc(ACTIVITY_ATTENDMAYBE) . "' ";
}
dbesc($item_id), dbesc($item_id), dbesc($item['uri'])
);
- if(count($r)) {
+ if (dbm::is_result($r)) {
$like_item = $r[0];
// Already voted, undo it
intval($like_item['id'])
);
- // Save the author information for the unlike in case we need to relay to Diaspora
- store_diaspora_like_retract_sig($activity, $item, $like_item, $contact);
-
$like_item_id = $like_item['id'];
- proc_run('php',"include/notifier.php","like","$like_item_id");
+ proc_run(PRIORITY_HIGH, "include/notifier.php", "like", $like_item_id);
return true;
}
$uri = item_new_uri($a->get_hostname(),$owner_uid);
$post_type = (($item['resource-id']) ? t('photo') : t('status'));
- if($item['obj_type'] === ACTIVITY_OBJ_EVENT)
+ if ($item['object-type'] === ACTIVITY_OBJ_EVENT) {
$post_type = t('event');
- $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") ;
+ }
+ $objtype = (($item['resource-id']) ? ACTIVITY_OBJ_IMAGE : ACTIVITY_OBJ_NOTE );
+ $link = xmlify('<link rel="alternate" type="text/html" href="' . App::get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . '" />' . "\n") ;
$body = $item['body'];
$obj = <<< EOT
<content>$body</content>
</object>
EOT;
- if($verb === 'like')
+ if ($verb === 'like') {
$bodyverb = t('%1$s likes %2$s\'s %3$s');
- if($verb === 'dislike')
+ }
+ if ($verb === 'dislike') {
$bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
- if($verb === 'attendyes')
+ }
+ if ($verb === 'attendyes') {
$bodyverb = t('%1$s is attending %2$s\'s %3$s');
- if($verb === 'attendno')
+ }
+ if ($verb === 'attendno') {
$bodyverb = t('%1$s is not attending %2$s\'s %3$s');
- if($verb === 'attendmaybe')
+ }
+ if ($verb === 'attendmaybe') {
$bodyverb = t('%1$s may attend %2$s\'s %3$s');
+ }
- if(! isset($bodyverb))
- return false;
+ if (! isset($bodyverb)) {
+ return false;
+ }
+
+ $ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
+ $alink = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
+ $plink = '[url=' . App::get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]';
+ /// @TODO Or rewrite this to multi-line initialization of the array?
$arr = array();
$arr['guid'] = get_guid(32);
$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;
$post_id = item_store($arr);
- if(! $item['visible']) {
+ if (! $item['visible']) {
$r = q("UPDATE `item` SET `visible` = 1 WHERE `id` = %d AND `uid` = %d",
intval($item['id']),
intval($owner_uid)
// Save the author information for the like in case we need to relay to Diaspora
- store_diaspora_like_sig($activity, $post_type, $contact, $post_id);
+ Diaspora::store_like_signature($contact, $post_id);
$arr['id'] = $post_id;
call_hooks('post_local_end', $arr);
- proc_run('php',"include/notifier.php","like","$post_id");
+ proc_run(PRIORITY_HIGH, "include/notifier.php", "like", $post_id);
return true;
}
-
-
-
-function store_diaspora_like_retract_sig($activity, $item, $like_item, $contact) {
- // Note that we can only create a signature for a user of the local server. We don't have
- // a key for remote users. That is ok, because if a remote user is "unlike"ing a post, it
- // means we are the relay, and for relayable_retractions, Diaspora
- // only checks the parent_author_signature if it doesn't have to relay further
- //
- // If $item['resource-id'] exists, it means the item is a photo. Diaspora doesn't support
- // likes on photos, so don't bother.
-
- $enabled = intval(get_config('system','diaspora_enabled'));
- if(! $enabled) {
- logger('mod_like: diaspora support disabled, not storing like retraction signature', LOGGER_DEBUG);
- return;
- }
-
- logger('mod_like: storing diaspora like retraction signature');
-
- if(($activity === ACTIVITY_LIKE) && (! $item['resource-id'])) {
- $signed_text = $like_item['guid'] . ';' . 'Like';
-
- // Only works for NETWORK_DFRN
- $contact_baseurl_start = strpos($contact['url'],'://') + 3;
- $contact_baseurl_length = strpos($contact['url'],'/profile') - $contact_baseurl_start;
- $contact_baseurl = substr($contact['url'], $contact_baseurl_start, $contact_baseurl_length);
- $diaspora_handle = $contact['nick'] . '@' . $contact_baseurl;
-
- // This code could never had worked (the return values form the queries were used in a wrong way.
- // Additionally it is needlessly complicated. Either the contact is owner or not. And we have this data already.
-/*
- // Get contact's private key if he's a user of the local Friendica server
- $r = q("SELECT `contact`.`uid` FROM `contact` WHERE `url` = '%s' AND `self` = 1 LIMIT 1",
- dbesc($contact['url'])
- );
-
- if( $r) {
- $contact_uid = $r['uid'];
- $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
- intval($contact_uid)
- );
-*/
- // Is the contact the owner? Then fetch the private key
- if ($contact['self'] AND ($contact['uid'] > 0)) {
- $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
- intval($contact['uid'])
- );
-
- if($r)
- $authorsig = base64_encode(rsa_sign($signed_text,$r[0]['prvkey'],'sha256'));
- }
-
- if(! isset($authorsig))
- $authorsig = '';
-
- q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
- intval($like_item['id']),
- dbesc($signed_text),
- dbesc($authorsig),
- dbesc($diaspora_handle)
- );
- }
-
- return;
-}
-
-function store_diaspora_like_sig($activity, $post_type, $contact, $post_id) {
- // Note that we can only create a signature for a user of the local server. We don't have
- // a key for remote users. That is ok, because if a remote user is "unlike"ing a post, it
- // means we are the relay, and for relayable_retractions, Diaspora
- // only checks the parent_author_signature if it doesn't have to relay further
-
- $enabled = intval(get_config('system','diaspora_enabled'));
- if(! $enabled) {
- logger('mod_like: diaspora support disabled, not storing like signature', LOGGER_DEBUG);
- return;
- }
-
- logger('mod_like: storing diaspora like signature');
-
- if(($activity === ACTIVITY_LIKE) && ($post_type === t('status'))) {
- // Only works for NETWORK_DFRN
- $contact_baseurl_start = strpos($contact['url'],'://') + 3;
- $contact_baseurl_length = strpos($contact['url'],'/profile') - $contact_baseurl_start;
- $contact_baseurl = substr($contact['url'], $contact_baseurl_start, $contact_baseurl_length);
- $diaspora_handle = $contact['nick'] . '@' . $contact_baseurl;
-
-
- // This code could never had worked (the return values form the queries were used in a wrong way.
- // Additionally it is needlessly complicated. Either the contact is owner or not. And we have this data already.
-/*
- // Get contact's private key if he's a user of the local Friendica server
- $r = q("SELECT `contact`.`uid` FROM `contact` WHERE `url` = '%s' AND `self` = 1 LIMIT 1",
- dbesc($contact['url'])
- );
-
- if( $r) {
- $contact_uid = $r['uid'];
- $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
- intval($contact_uid)
- );
-
- if( $r)
- $contact_uprvkey = $r['prvkey'];
- }
-*/
-
- // Is the contact the owner? Then fetch the private key
- if ($contact['self'] AND ($contact['uid'] > 0)) {
- $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
- intval($contact['uid'])
- );
-
- if($r)
- $contact_uprvkey = $r[0]['prvkey'];
- }
-
- $r = q("SELECT guid, parent FROM `item` WHERE id = %d LIMIT 1",
- intval($post_id)
- );
- if( $r) {
- $p = q("SELECT guid FROM `item` WHERE id = %d AND parent = %d LIMIT 1",
- intval($r[0]['parent']),
- intval($r[0]['parent'])
- );
- if( $p) {
- $signed_text = 'true;'.$r[0]['guid'].';Post;'.$p[0]['guid'].';'.$diaspora_handle;
-
- if(isset($contact_uprvkey))
- $authorsig = base64_encode(rsa_sign($signed_text,$contact_uprvkey,'sha256'));
- else
- $authorsig = '';
-
- q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
- intval($post_id),
- dbesc($signed_text),
- dbesc($authorsig),
- dbesc($diaspora_handle)
- );
- }
- }
- }
-
- return;
-}