<?php
+require_once("include/diaspora.php");
/**
* @brief add/remove activity to an item
dbesc($item_id)
);
- if(! $item_id || (! count($r))) {
+ if(! $item_id || (! dbm::is_result($r))) {
logger('like: no item ' . $item_id);
return false;
}
intval($item['contact-id']),
intval($item['uid'])
);
- if(! count($r))
+ if(! dbm::is_result($r))
return false;
if(! $r[0]['self'])
$remote_owner = $r[0];
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) {
intval($_SESSION['visitor_id']),
intval($owner_uid)
);
- if(count($r))
+ if (dbm::is_result($r))
$contact = $r[0];
}
if(! $contact) {
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") ;
$arr = array();
+ $arr['guid'] = get_guid(32);
$arr['uri'] = $uri;
$arr['uid'] = $owner_uid;
$arr['contact-id'] = $contact['id'];
// 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;
-
- // 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)
- $authorsig = base64_encode(rsa_sign($signed_text,$r['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;
-
- // 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'];
- }
-
- $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 = $r[0]['guid'] . ';Post;' . $p[0]['guid'] . ';true;' . $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;
-}